2017-11-11 220 views
1

我收到了一些奇怪的結果,試圖鏈接到外部庫。 如果我運行在命令行中執行以下操作:鏈接和編譯後C執行錯誤

gcc fftwTest.c -I../extlib/fftw-3.3.5-dll32 -L../extlib/fftw-3.3.5-dll32 -lfftw3-3 -lm -o test 

test.exe的編譯,但是當我運行它,我得到一個錯誤消息,該程序無法啓動,因爲libfftw3-3.dll從我失蹤電腦。儘管鏈接器在編譯時發現它。

如果我將libfftw3-3.dll放到與我的fftwTest.c文件相同的目錄中,並執行-L到那裏,它會編譯並運行OK。所以我想這表明我正在對我的-L命令做一些錯誤的事情,但是當它鏈接和編譯時,我不知道是什麼。

任何幫助,將不勝感激。

謝謝!

回答

0

你的鏈接命令沒有錯,是的,鏈接器在編譯時發現它,因爲你指定了它的路徑,但運行程序時這是一個不同的故事(鏈接器不能/不能硬編碼該DLL可能位於部署機器上的其他位置)。

DLL必須位於系統路徑或與可執行文件相同的目錄中。你的情況,你可以:

  • 副本中的.exe目錄中的DLL(你發現你自己)
  • 或添加:set PATH=%PATH%;../extlib在批處理文件中啓動您的可執行文件之前(或設置在完整的絕對路徑使用Windows環境變量管理)

複製的DLL中可執行文件的目錄系統路徑是更好,當你軟件包分發至第三方,無需進行任何配置,但是,如果使用/升級DLL很多次,在很多小程序上,開發機器上的最佳解決方案是將它保存在一個地方並設置系統PATH運行它(這是權衡)