6

次のように、POCO C++ ライブラリの静的バージョンにリンクしようとしています。

g++ BCCMain.o -L$_POCO_LIBS -Wl,-Bstatic $_POCO_LIBS/libPocoFoundation.a $_POCO_LIBS/libPocoUtil.a $_POCO_LIBS/libPocoXML.a $_POCO_LIBS/libPocoJSON.a -Wl,-Bdynamic -o BCMain

残念ながら、これにより、次のようなシンボルへの未定義の参照に関するエラーが発生します。

Poco::Logger::get(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)

実際Poco::Logger::get(std::string const&)には で定義されていますがlibPocoFoundation.a

今、ファウンデーション ライブラリの共有バージョンにリンクしようとすると、次のように機能します。

g++ BCCMain.o -L$_POCO_LIBS -Wl,-Bstatic $_POCO_LIBS/libPocoFoundation.a $_POCO_LIBS/libPocoUtil.a $_POCO_LIBS/libPocoXML.a $_POCO_LIBS/libPocoJSON.a -Wl,-Bdynamic -lPocoFoundation -o BCMain

ライブラリの静的バージョンと共有バージョンには同じシンボルがあるため、何が間違っているのかを理解するのは困難です。

Ubuntu/リナロ。g++ 4.6.3

4

2 に答える 2

18

私の経験では、静的にリンクする場合、Poco ライブラリをリンクする順序が重要です。重要な基盤のようです。最後の 1 つです。

私にとってうまくいく順序は次のとおりです。

  1. ユーティリティ
  2. ネット
  3. XML
  4. 財団
于 2013-10-15T09:31:04.653 に答える