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

时间:2018-09-17 19:01:47

标签: ubuntu gcc udev

我正在尝试在Ubuntu Linux上构建依赖于libusb的共享库。

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

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

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

足够公平。

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

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

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

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

以某种方式,我想将libusb静态链接到我的共享库中,以避免出现这些类型的符号查找错误,但我找不到gcc构建选项的正确组合。

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

谢谢。

1 个答案:

答案 0 :(得分:1)

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

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

 -Wl,--whole-archive -lusb -Wl,--no-whole-archive
相关问题