2010-11-10 72 views
0

我試圖端口/構建我的代碼作爲一個dll在Windows上編寫的gcc(在Linux上)。首先,我嘗試在VC++中構建,但是有太多的錯誤/警告(主要是在VC自己的包含文件中,這對我來說並沒有多大意義),所以我安裝了MinGW發行版(其中包括Boost庫)。編譯進行得非常順利,但鏈接失敗,未定義的引用boost庫的函數。 「-t」參數表明鏈接器實際上並沒有使用boost庫(是的,-L路徑是正確的,庫在那裏,當我使用-l時,鏈接器沒有抱怨)。問題鏈接C++代碼使用提升與mingw

經過大量的搜索,我發現順序是問題,我必須將我的-l參數放在所有.o文件之後(因爲依賴關係)。這似乎解決了所有問題,除了一個未定義的線程庫引用。再次表明,這個庫實際上沒有被鏈接器使用(不在列表中),其他庫都是(我也使用boost_system和boost_date_time)。我再次參數的順序,但結果是一樣的。任何想法我錯過了什麼?

的錯誤是:

c:/x5/cpp/build//timed_cond.o:timed_cond.cpp:(.text$_ZN5boost6detail24basic_condition_variable7do_waitINS_11unique_lockINS_5mutexEEEEEbRT_NS0_7timeoutE[bool boost::detail::basic_condition_variable::do_wait<boost::unique_lock<boost::mutex> > (boost::unique_lock<boost::mutex>&, boost::detail::timeout)]+0x246): undefined reference to `_imp___ZN5boost11this_thread18interruptible_waitEPvNS_6detail7timeoutE' 

我這兩個平臺

回答

1

好上使用Boost庫(1.44.0)的版本相同,我找到了答案。看起來問題在於MinGW-distro中的boost庫是靜態的。通常他們被配置爲動態鏈接,並導致上述問題。 This答案解釋它...