我正在尝试在Ubuntu Linux上构建依赖于libusb的共享库。
我想将libusb静态链接到共享库中。
现在,将libusb构建为静态库。
现在,当我尝试将其链接到我的共享库时,链接器给出一个错误,提示我应使用-fPIC标志构建libusb。
足够公平。
所以我用-fPIC构建了libusb-但是后来我注意到.so的大小明显变小了,大概是因为它不再创建静态库了。
但是,我能够使用-fPIC版本的libusb成功构建共享库。
但是,当我的应用程序尝试加载共享库时,动态加载器会出现以下错误:
符号查找错误:未定义的符号:udev_new
以某种方式,我想将libusb静态链接到我的共享库中,以避免出现这些类型的符号查找错误,但我找不到gcc构建选项的正确组合。
有人可以帮忙解决这个问题吗?
谢谢。
答案 0 :(得分:1)
问题可能是当您在libusb.a库中链接时,只有共享库中使用的libusb中的符号才被链接到共享对象中。
要解决此问题,请使用--whole-archive linker标志。
而不是简单地使用-lusb
,而是使用
-Wl,--whole-archive -lusb -Wl,--no-whole-archive