Poco C++中的未定义符号

3

之前我编写了一个使用Poco C++的简单命令行程序(顺便说一下,我非常喜欢这个库)。该程序在运行数月后完美运行。

我的计算机上一定发生了一些变化,因为现在当我运行该程序时,会收到以下错误信息。

dyld: Symbol not found: __ZN4Poco4Util11Application12handleOptionERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEESA_
  Referenced from: /Users/me/bin/sqlmerge
  Expected in: /usr/local/opt/poco/lib/libPocoUtil.16.dylib
 in /Users/me/bin/sqlmerge

有人能告诉我为什么会出现这种情况吗?我使用的是 Poco 1.4.6 进行编译,也是用 Poco 1.4.6 运行,尽管我的电脑上因某些原因缺少了 Poco 库,所以我不得不使用 brew install poco 重新安装(我显然是在 Mac 上运行这个程序)。 编辑:我不确定原因,但是开启 --c++11 参数重新安装可以解决这个问题。例如:
brew install poco --c++11

也许C++名称修饰从旧版C++标准到C++11有些微变化?
1个回答

1
C++没有应用程序二进制接口。这会导致很多问题,包括当人们升级编译器版本时需要重新编译。同一编译器,不同版本,命名修饰不同。这就是为什么大多数库都有一个C接口......由于历史原因,C接口在所有已知平台上具有稳定的命名修饰。 Herb Sutter提出了一个稳定的平台ABI,为C++提供了帮助 :-) http://morpher.com/documentation/articles/abi/ C++ ABI issues list

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4028.pdf


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接