2014-02-05 38 views
14

我試圖建立提升和生成DLL的,但我所做的任何事情都沒有解決問題。Building Boost動態鏈接提供鏈接錯誤?

這裏什麼我有:

創建庫bin.v2 \庫\螺紋\建立\ MSVC-11.0 \ DBG \美國存託憑證MDL-32 \異步excpt上\ THRD-MLT \ boost_thread-vc110-mt-gd-1_53.lib和object bin.v2 \ libs \ thread \ build \ msvc-11.0 \ dbg \ adrs-mdl-32 \ async-excpt-on \ thrd-mlt \ boost_thread-vc110-mt -gd-1_53.exp thread.obj:錯誤LNK2019:無法解析的外部符號「__declspec(dllimport)public:__thiscall boost :: gregorian :: greg_month :: greg_month(unsigned short)」(_ imp ?? 0greg_month @ gregorian @ 0 @ @ @ QAE @ G @ Z)在函數「public:__thiscall boost :: gregorian :: date :: date(enum boost :: date_time :: special_values)」中引用(?? 0date @ gregorian @ boost @@ QAE @ W4special_values @ date_time @ 2 @@ Z) thread.obj:error LNK2019:無法解析的外部符號「__declspec(dllimport)public:__thiscall boost :: gregorian :: greg_month :: operator unsigned short(void)const」(_ imp ?? Bgreg_month @ gregorian @ boost @@ QBEGXZ)在函數__catch中引用$?make_external_thread_data @?A0x9b8c45f0 @ boost @@ YAXXZ $ 0 bin.v2 \ libs \ thread \ build \ msvc-11.0 \ dbg \ adrs-mdl- 32 \異步-excpt上\ THRD-MLT \ boost_thread-vc110-MT-GD-1_53.dll:致命錯誤LNK1120:2周解析的外部

這裏關於設置的一些信息:

OS: W7 x64

命令來構建:

B2 -j%NUMBER_OF_PROCESSORS%--abbreviate路徑工具集= MSVC-11.0定義= _SECURE_SCL = 0定義= _CRT_SECURE_NO_DEPRECATE限定= _CRT_SECURE_NO_WARNINGS --without-MPI地址模型= 32變異=調試安裝鏈接=共享運行時鏈接=共享線程=多非同步的例外=在異常處理=上的extern-C-拋出異常= OFF前綴= .. \提振 CD ..

我已將CYGWin安裝到計算機上。

在這裏,我已經嘗試到現在;

*我試圖建立它在32位命令窗口(我用詹金斯打造提升)

*我在升壓配置寫的#define BOOST_ALL_DYN_LINK/user.hpp

*我在boost config/user.hpp中寫了#define BOOST_ALL_NO_LIB

有沒有人遇到過這樣的問題?我在任何地方都找不到任何東西?


編輯:

有一個關於我的問題的更新。我能夠構建它用於發佈。只有我改變的東西在這裏:

b2 -j%NUMBER_OF_PROCESSORS%--abbreviate-paths toolset = msvc-11。0 define = _SECURE_SCL = 0 define = _CRT_SECURE_NO_DEPRECATE define = _CRT_SECURE_NO_WARNINGS --without-mpi address-model = 32 variant = release安裝鏈接=共享運行時鏈接=共享線程=多asynch-exceptions = on exception-handling = on extern -c-nothrow = off --prefix = .. \ boost cd ..

可能是什麼問題?我該如何解決它?

先感謝您的任何建議。

+0

您可以BOOST_NO_USER_CONFIG抑制user.hpp:https://groups.google.com/forum/#!topic/boost-list/OSkv0cKjpVM –

+0

@thomas謝謝你的評論。其實我認爲我需要#define BOOST_ALL_DYN_LINK定義,所以我將它添加到user.hpp作爲我的配置。這樣我定義了BOOST_ALL_DYN_LINK,如果你閱讀上面的評論,似乎有必要。默認情況下,我認爲user.hpp不被抑制,對吧? – MeM

+0

您是否嘗試將'#define BOOST_ALL_DYN_LINK'直接放入date_time/compiler_config.hpp?這可能是一個壞主意,但BOOST_DATE_TIME_DECL似乎在那裏定義。 –

回答

2

其實我已經找到了解決辦法:

我使用的bjam的方式是正確的,足夠的動態構建的推動作用。在那個階段,我不應該定義任何東西。編譯後,我更改了user.hpp和#define BOOST_ALL_DYN_LINK。 這樣我自己的項目(使用boost)會理解boost是動態的。這就是應該如何推動增長的方式。

這似乎是最好的方式,因爲升壓自動解碼所需的庫和DLL的預期和運作良好。

1

我看到有很多手動步驟涉及到實現一個成功的助推構建。以防萬一您不想通過這些手動步驟並避免開銷嘗試BlueGo,前提是您要使用MSVC工具集。 BlueGo允許配置32/64位調試/釋放模式等等。