2010-08-18 118 views
2

我用CMake和Visual C++來構建HyDE庫。然後,仍然在VC++中,我能夠成功創建代碼並構建可鏈接到HyDE.lib和HyDE頭文件的可執行文件。g ++鏈接問題:對函數的未定義引用

然後我發現爲了和我公司的其他人一起工作,最好在Eclipse CDT中開發。對於Eclipse CDT知之甚少,我創建了一個默認的hello world項目,刪除了代碼,然後將所有代碼轉儲到src文件夾中。然後我試圖改變includes和lib路徑和庫以反映VC++中的工作。在這一點上似乎一切編譯,但是我在聯得到一個錯誤:

/cygdrive/c/EclipseWorkspace/425HyDE/Debug/../src/FS5HyDE.cpp:16:未定義的引用`HyDEAPI: :海德::海德(HyDESystemModel :: SystemModel *,布爾)」

(有很多這樣的更多的錯誤,都指海德方法。)下面是在命令行中運行:

g ++ -L「C:\ Progra〜1 \ boost \ boost_1_42 \ lib」-L「C:\ EclipseWorkspace \ HyDE」-o「425HyDE.exe」./src/Adapter_FS5HyDE.o ./src/EPSC ommands.o ./src/EPSCurrentSensor.o ./src/EPSFault.o ./src/FS5HyDE.o ./src/HyDEObservation.o ./src/MCDH.o ./src/MCDH_Module.o ./src/PDBComponent .o ./src/PowerSystem.o ./src/Program.o ./src/SSPCComponent.o ./src/Telemetry.o ./src/TelemetryReport.o -l:libboost_thread-vc90-mt-gd-1_42。 lib -lHyDE

這絕對不是庫訂購問題,因爲我也有其他訂購(只有兩個)。在VC++(使用Windows編譯器)中編譯HyDE.lib並用g ++編譯我的程序時可能有問題嗎? Eclipse CDT是否會自動生成makefiles,這會不會有問題?任何其他想法?

(注:似乎有很多其他問題上的SO類似的問題,但通過他們看完之後,我還沒有找到一個解決我的問題)

回答

1

解決方案:由於HyDE庫是使用Visual Studios編譯器編譯的,我試圖使用Cygwin工具鏈構建與其鏈接的代碼,因此兩個編譯器使用不同的名稱修改方案,以便後者的鏈接程序找不到HyDE庫中的預期符號。我找到的唯一解決方案是使用Cygwin工具鏈重新編譯HyDE庫使用Visual Studios正在使用的任何編譯器編譯新代碼。 (發牢騷抱怨)

1

經典缺少符號錯誤。哪個源文件定義:

HyDEAPI::HyDE::HyDE(HyDESystemModel::SystemModel*, bool)'

該文件是否已添加到彙編?你能在你粘貼的命令行上看到它嗎?

如果此符號屬於外部庫,在添加目錄路徑-L後,可以使用-l添加要與程序鏈接的特定庫的名稱。

我會建議你嘗試添加到編輯命令HyDE.lib的目錄路徑,緊跟庫名,如:

-L"C:\path_to_hyde_library" -l:HyDE.lib 

,然後告訴我們發生了什麼。

+0

-L「C:\ EclipseWorkspace \ HyDE」和上面的帖子中的lHyDE *應該*按照你說的去做。我也試過-l:HyDE.lib。同樣的結果。 – JnBrymn 2010-08-18 19:26:48

+0

您是否能夠在命令行上鍊接 - 沒有日食。鏈接是否可以與您使用的任何命令行一起工作?你可以嘗試的另外一件事是-l「包括lib名稱的完整庫路徑」 – Gangadhar 2010-08-18 19:41:10

+0

@Gandahar我無法使用相同的命令在命令行上進行鏈接。還使用-l「完整路徑」不起作用。使用-l「完整的cygwin路徑」不起作用。 – JnBrymn 2010-08-18 19:56:04

0

./src/FS5HyDE.o./src/HyDEObservation.o應該是最新的參數,如果其他目標文件(* .o文件)需要他們來說,這意味着最需要object files應該出現在去年儘可能在參數列表中。

+0

對不起,那沒用。 – JnBrymn 2010-08-18 19:51:48

相關問題