0

MSVC 10.0 でプロジェクトを boost.log に静的にリンクしようとすると、次の (およびその他の) エラーが発生します。

 1>libboost_log-vc100-mt-gd-1_53.lib(attribute_name.obj) : error
 LNK2001: unresolved external symbol "**__declspec(dllimport)** public:
 __thiscall std::_Container_base::~_Container_base(void)" (__imp_??1_Container_base@std@@QAE@XZ)
 1>libboost_log-vc100-mt-gd-1_53.lib(text_file_backend.obj) : error
 LNK2001: unresolved external symbol "**__declspec(dllimport)** public:
 __thiscall std::_Container_base::~_Container_base(void)" (__imp_??1_Container_base@std@@QAE@XZ)

このプロジェクト、boost システム、ファイルシステム、およびスレッド ライブラリにもリンクしていることに注意してください。

1>      Searching ../lib/\libboost_system-vc100-mt-gd-1_53.lib:
1>      Searching ../lib/\libboost_date_time-vc100-mt-gd-1_53.lib:
1>      Searching ../lib/\libboost_regex-vc100-mt-gd-1_53.lib:
1>      Searching ../lib/\libboost_thread-vc100-mt-gd-1_53.lib:
1>      Searching ../lib/\libboost_chrono-vc100-mt-gd-1_53.lib:
1>      Searching ../lib/\libboost_log-vc100-mt-gd-1_53.lib:
1>      Searching ../lib/\libboost_filesystem-vc100-mt-gd-1_53.lib:

私のプロジェクトではBOOST_ALL_DYN_LINKまたはBOOST_LOG_DYN_LINKマクロが定義されていないため、__declspec署名が表示されるとは思っていませんでした。これが究極の問題だと考えています。このライブラリを静的に適切にリンクするために必要なものが不足していますか?

アップデート

プロジェクトのプリコンパイル済みヘッダーを削除し、「クリーン」を実行すると、すべてが正常にリンクされました。プリコンパイルされたヘッダーが原因で、プロジェクトが CRT に静的にリンクされた可能性はありますか?

4

1 に答える 1

0

log_setup最初にリンクが必要な場合があり、そのlog前にリンクが必要になる場合がありますfilesystem。これは私のCMakeLists.txt:

set(USED_BOOST_LIBS ${Boost_LOG_SETUP_LIBRARY} ${Boost_LOG_LIBRARY} 
  ${Boost_FILESYSTEM_LIBRARY} 
  ${Boost_SYSTEM_LIBRARY} ${Boost_DATE_TIME_LIBRARY} 
  ${Boost_THREAD_LIBRARY} ${Boost_REGEX_LIBRARY} 
  )

...
target_link_libraries(myexe ${USED_BOOST_LIBS})

MSVC 14.0 と gcc 4.8 の両方で問題なく動作します。試すことができます。

于 2016-12-21T06:45:34.737 に答える