【问题标题】:Error when linking with POCO library compiled with i686-w64-mingw32与使用 i686-w64-mingw32 编译的 POCO 库链接时出错
【发布时间】:2013-09-08 19:52:18
【问题描述】:

我正在使用从 sf 下载的 i686-w64-mingw32 来编译 POCO 库。编译库并创建 libPoco*.a 文件(带有一些警告)。 现在,当我想使用这些文件时(例如,在将字符串转换为整数的小型示例项目中),链接器会抛出错误:./Debug/main.o:main.cpp:(.text+0xab): undefined引用`imp__ZN4Poco12NumberParser5parseERKSs'

奇怪的是,如果我使用 TDM-MinGW-4.7.1 为双方(lib 和测试应用程序)进行编译,一切都很好!

我尝试在两个编译中设置“-march=i386;-m32”,但没有成功。这是我尝试构建测试应用程序时的链接器日志:

g++ -o ./Debug/testpoco @"testpoco.txt" -L. -Lc:/poco/lib/  -lPocoFoundationmtd  -v
Using built-in specs.
COLLECT_GCC=g++
...
Target: i686-w64-mingw32
...
Thread model: win32
gcc version 4.8.1 (rev5, Built by MinGW-W64 project)
...
COLLECT_GCC_OPTIONS='-o' './Debug/testpoco.exe' '-L.' '-Lc:/poco/lib/' '-v' '-shared-libgcc' '-mtune=generic' '-march=i686'
...
./Debug/main.o:main.cpp:(.text+0xab): undefined reference to `_imp___ZN4Poco12NumberParser5parseERKSs'
collect2.exe: error: ld returned 1 exit status
mingw32-make.exe[1]: *** [Debug/testpoco] Error 1
testpoco.mk:77: recipe for target 'Debug/testpoco' failed

【问题讨论】:

  • 好吧,好吧,好吧!我修好了它。链接器正在寻找“_impl_xxxx”符号,而静态库中的符号是“xxxx”。我必须在我的客户端应用程序中定义“POCO_STATIC”。就是这样!

标签: c++ linker linker-errors poco


【解决方案1】:

通常只有当你没有正确链接你的库时才会抛出这样的错误。你确定 libPocoFoundationmtd.a 包含这个函数吗?如果这样做,编译这些库时会显示什么警告。也检查这些

确保您定义了所有需要的预处理器符号! (-D) 例如:POCO_STATIC

【讨论】:

  • 我使用 ar 和 objDump 查看链接器所抱怨的类的库和目标文件的内容。似乎目标文件中的符号名为“__ZN4Poco12NumberParser5parseERKSs”,而链接器为“_imp___ZN4Poco12NumberParser5parseERKSs”给出了 undef-ref 错误。
  • 11 警告与可见性属性有关:C:/poco/Foundation/src/inffast.c:324:1:警告:此配置不支持可见性属性;忽略[-Wattributes]
  • 也许你需要定义一些预处理器? (-D)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-20
  • 2022-07-29
  • 1970-01-01
相关资源
最近更新 更多