如何静态链接库以构建共享库

问题描述 投票:0回答:1

我试图在Ubuntu Linux中构建一个依赖于libusb的共享库。

我想在libusb中静态链接到我的共享库。

现在,将libusb构建为静态库。

现在,当我尝试将其链接到我的共享库时,链接器会给出一个错误,说我应该使用-fPIC标志构建libusb。

很公平。

所以我用-fPIC构建了libusb - 然后我注意到.so的大小变得非常小,大概是因为它不再创建静态库。

但是,我能够使用-fPIC版本的libusb成功构建我的共享库。

但是,当我的应用程序尝试加载我的共享库时,动态加载程序会出现以下错误:

符号查找错误:未定义符号:udev_new

不知何故,我想静态地将libusb链接到我的共享库,以避免这些类型的符号查找错误,但我找不到正确的gcc构建选项组合。

有人可以解决这个问题吗?

谢谢。

ubuntu gcc udev
1个回答
1
投票

问题可能是当您在libusb.a库中进行链接时,只有共享库中使用的libusb中的符号才会链接到您的共享对象中。

要解决此问题,请使用--whole-archive linker标志。而不是简单地使用-lusb,使用

 -Wl,--whole-archive -lusb -Wl,--no-whole-archive
© www.soinside.com 2019 - 2024. All rights reserved.