我试图在Ubuntu Linux中构建一个依赖于libusb的共享库。
我想在libusb中静态链接到我的共享库。
现在,将libusb构建为静态库。
现在,当我尝试将其链接到我的共享库时,链接器会给出一个错误,说我应该使用-fPIC标志构建libusb。
很公平。
所以我用-fPIC构建了libusb - 然后我注意到.so的大小变得非常小,大概是因为它不再创建静态库。
但是,我能够使用-fPIC版本的libusb成功构建我的共享库。
但是,当我的应用程序尝试加载我的共享库时,动态加载程序会出现以下错误:
符号查找错误:未定义符号:udev_new
不知何故,我想静态地将libusb链接到我的共享库,以避免这些类型的符号查找错误,但我找不到正确的gcc构建选项组合。
有人可以解决这个问题吗?
谢谢。
问题可能是当您在libusb.a库中进行链接时,只有共享库中使用的libusb中的符号才会链接到您的共享对象中。
要解决此问题,请使用--whole-archive linker标志。而不是简单地使用-lusb
,使用
-Wl,--whole-archive -lusb -Wl,--no-whole-archive