我已經在Visual Studio中創建了一個靜態庫(它沒有使用mfc),並且想要在靜態鏈接的mfc項目(實際上是com-dll)中鏈接它。Visual Studio:靜態鏈接到靜態庫
鏈接mfc-lib
我收到一堆消息symbol is already defined
。這是因爲我將標準C++庫鏈接了兩次(一次在靜態庫中,另一次在mfc項目中)。
我該如何解決? 與/FORCE:MULTIPLE
有一個解決方法,但我認爲這是一個不好的決定。
我已經在Visual Studio中創建了一個靜態庫(它沒有使用mfc),並且想要在靜態鏈接的mfc項目(實際上是com-dll)中鏈接它。Visual Studio:靜態鏈接到靜態庫
鏈接mfc-lib
我收到一堆消息symbol is already defined
。這是因爲我將標準C++庫鏈接了兩次(一次在靜態庫中,另一次在mfc項目中)。
我該如何解決? 與/FORCE:MULTIPLE
有一個解決方法,但我認爲這是一個不好的決定。
將靜態庫鏈接到DLL或EXE項目時,需要注意所有項目都已編譯爲使用相同的運行時庫。因此,請將所有項目設置爲「使用MFC」,並將其設置爲相同的「運行時庫」。如果你不這樣做,那麼一個項目可能已經被編譯爲從標準CRT獲取fopen函數,而另一個項目可能已經被編譯爲從MFC獲取fopen函數。混合這些對於連接器來說是一個問題,因爲他不知道使用哪個運行時(以及在該示例中:哪個fopen)。
將DLL或EXE項目鏈接到另一個DLL項目時,這不是問題。你可以擁有一個沒有MFC使用的DLL,並將你的MFC EXE與該DLL鏈接起來。
如果你有一個在不同項目中經常使用的util庫,那麼你可以考慮設置不同的構建設置,以便可以在DEBUG和RELEASE以及使用和不使用MFC的情況下構建庫。然後在您的EXE項目中,您可以選擇與您的項目設置相匹配的庫二進制文件。
修復它的最好方法是靜態鏈接所有使用的項目,就像 – stijn
Project + Properties,C/C++,代碼生成,運行時庫設置一樣簡單。 –
似乎問題的確在於連接類型的差異。謝謝。 – Georg