将C ++代码与库中的C代码混合会产生未定义的符号错误

问题描述 投票:0回答:1

我有一个由.c模块和一些.cpp模块组成的库。我认为将库链接到C ++主程序中就可以了。但是,当我尝试将该库链接到C程序时,出现“标准C ++库”模块的链接器错误。

gcc -o PSEQ.app -Xlinker --allow-shlib-undefined pseq.app.o -L../librep -lrep

..librep/ssuinventbean.cpp:62: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string()'

所讨论的程序不是用C ++编写的,它没有引用ssuinventbean.cpp模块。我问了一个类似的问题,关于未引用的共享库模块抱怨从那里调用的内容,并被告知-allow-shlib-undefined链接器标记可用于解决此问题。我尝试在上面的gcc命令中使用该标志,但是当所涉及的库是静态链接库时,显然它不能像宣传的那样工作。

通常,这不会有问题。我可以确保应用程序库中的所有模块都满足其所有引用。但是在这种情况下,参考的是标准C ++库,如果有问题的程序的主要模块在C ++中,我认为应该包括在内。那么,赶上22?如果该库将与非C ++应用程序链接,我是否可以在该库中没有C ++代码-即使从未引用过相关的.cpp模块也是如此?我是否必须将所有C ++库代码都隔离到其自己的.a文件中,仅在构建调用该代码的应用程序时才将其包括在内?

我有一个由.c模块和一些.cpp模块组成的库。我认为将库链接到C ++主程序中就可以了。但是当我尝试将该库链接到C ...

c++ linker libraries
1个回答
0
投票

我发现是什么原因造成的。原来有人将变量定义放到了.h文件中,该文件被拉到了.cpp文件中。我猜这是不确定的,编译器将如何处理.h文件中的全局变量(最终可能会在将其插入的多个.c或.cpp文件中进行定义)。

© www.soinside.com 2019 - 2024. All rights reserved.