1

将共享库 (Foo) 与另一个内部静态库 (Bar) 链接时,我们遇到了一个奇怪的问题。Bot 库构建在同一台机器上的同一 CMake 构建目录中。

很明显,共享库中的代码必须与位置无关,因此我们在任何静态库依赖项上设置 PIC,如下所示:

set_property(TARGET Bar PROPERTY POSITION_INDEPENDENT_CODE True)

我们以常规方式链接库,使用target_link_libraries(Foo PUBLIC Bar).

这适用于 GCC 4.8、ld 2.22 和 CMake 3.10.1。

但是,由于某种原因,使用 GCC 7、ld 2.29.1 和 CMake 3.10.2 链接失败undefined reference,Bar 中的不同函数出现多个错误。函数在 Bar 中定义和实现,使用 Foo 并且整个东西用 GCC4.8 编译。那么给了什么?

我们也知道双重 ABI 情况和std::string. (请参阅https://stackoverflow.com/a/49119902/2095190)但是错误不符合模式。

我有一些想法,尽管他们都没有解释为什么它可以与旧工具链一起使用:

我们的项目比较复杂,下周我会尝试隔离错误。

4

0 回答 0