GCC7的CMake项目“未定义的参考”错误,但GCC4.8却没有

时间:2019-03-28 10:21:50

标签: c++ gcc cmake gcc4.8 gcc7

将共享库(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上可以正常使用。

但是,由于某些原因,对于Bar中的不同功能,对于GCC 7,ld 2.29.1和CMake 3.10.2,链接失败,并出现多个undefined reference错误。这些功能是在Bar中定义和实现的,使用了Foo,整个内容都使用GCC4.8进行了编译。那有什么呢?

我们也意识到ABI的双重局面和std::string的潜在问题。 (请参见https://stackoverflow.com/a/49119902/2095190。但是,该错误不适合该模式。

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

我们的项目相对复杂,下周我将尝试隔离该错误。

0 个答案:

没有答案