【问题标题】:Linking error with Poco Net与 Poco Net 的链接错误
【发布时间】:2012-12-13 13:31:36
【问题描述】:

我一直在尝试使用 POCO 库构建一些代码。

我在尝试构建时得到以下信息

Undefined symbols for architecture x86_64:
  "Poco::Net::SocketAddress::SocketAddress(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned short)", referenced from:
      .....
ld: symbol(s) not found for architecture x86_64

现在问题来了:我正在链接 -lPocoFoundation -lPocoNet -lPocoUtil

我错过了什么?

(我应该说我在 Mac OS X 10.8.2 上使用 clang 编译

【问题讨论】:

  • 也许你有其他版本的 POCO 的库头,然后是 LD_LIBRARY_PATH 下的库(或者在 Mac OS X 上调用它)?或者你已经为 32 位编译了 POCO?
  • 刚刚检查过,POCO 是为 Darwin64 构建的(我使用自制软件安装它),我为 POCO 拥有的唯一头文件是那些为相同版本安装的头文件,我试图链接其库: (

标签: c++ xcode linker poco-libraries


【解决方案1】:

我也有同样的问题。我发现更改 xcode 构建设置很有用。 将 C++ 标准库从 libc++(支持 C++ 11 的 LLVM C++ 标准库)更改为 libstdc++(GNU C++ 标准库)。然后它将通过构建。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,Leezi 写的对我来说效果很好。我使用的是 1.4.6 版本。

    我唯一需要做的就是再次编译 Poco 库(因为它是为支持 C++11 的 clang 而编译的):

    ./configure --config=Darwin64-gcc
    make
    sudo make install
    

    您可以做的另一种方法是编译具有 C++11 支持的 Poco 库,但这有点复杂。 首先我必须在 Foundation 中修改两个源文件:

    Foundation/src/NumberParser.cpp:

    127c127
    <   return std::sscanf(s.c_str(), "%"I64_FMT"d%c", &value, &temp) == 1;
    ---
    >   return std::sscanf(s.c_str(), "%" I64_FMT "d%c", &value, &temp) == 1;
    144c144
    <   return std::sscanf(s.c_str(), "%"I64_FMT"u%c", &value, &temp) == 1;
    ---
    >   return std::sscanf(s.c_str(), "%" I64_FMT "u%c", &value, &temp) == 1;
    161c161
    <   return std::sscanf(s.c_str(), "%"I64_FMT"x%c", &value, &temp) == 1;
    ---
    >   return std::sscanf(s.c_str(), "%" I64_FMT "x%c", &value, &temp) == 1;
    

    Foundation/src/DirectoryWatcher.cpp:

    51a52
    > #include <unistd.h>
    

    我也修改了 build/config/Darwin-clang 文件:

    55,56c55,56
    < CXXFLAGS        = $(ARCHFLAGS) -Wall -Wno-sign-compare
    < LINKFLAGS       = $(ARCHFLAGS)
    ---
    > CXXFLAGS        = $(ARCHFLAGS) -Wall -Wno-sign-compare -std=c++11 -stdlib=libc++
    > LINKFLAGS       = $(ARCHFLAGS) -stdlib=libc++
    80c80
    < SYSLIBS  = -ldl
    ---
    > SYSLIBS  = -ldl -lstdc++
    

    我只需要静态库,所以我只编译了那个:

    ./configure --static --omit=Data --config=Darwin64-clang --poquito -no-tests -no-samples -no-shared
    make clean
    make
    sudo make install
    

    如果您也需要样本和测试,那么我认为您应该制作一个 xcode 项目并进行设置,或者深入了解 makefile... 我希望这会有所帮助...

    【讨论】:

    • 感谢发布使用 C++11 支持构建所需的 Poco 构建配置更改。
    猜你喜欢
    • 1970-01-01
    • 2016-09-17
    • 1970-01-01
    • 2021-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多