簡體   English   中英

Windows上的CMake鏈接共享庫(lib),但找不到dll

[英]CMake link shared library(lib) on Windows but cannot find dll

假設我使用cmake創建一個像這樣的項目:

${root}/lib/CMakeLists.txt
add_library(FooLib SHARED ${SOURCES})

${root}/main/CMakeLists.txt
add_executable(Main main.cpp)
target_link_libraries(Main FooLib)

現在,如果我在linux上運行Main(在我的情況下為fedora),它將自動加載FooLib.so。 但是在Windows上,Main.exe會抱怨找不到FooLib.dll。 當然,如果我復制FooLib.dll或手動指定PATH,Main.exe也可以正常工作。

我的問題是,這是因為Windows上的lib&dll工作流是嗎?

就像Linux上一樣,Main.exe有什么辦法可以修正FooLib庫的路徑嗎?

如果您以靜態或動態方式將可執行文件與lib鏈接,則相應的dll必須與exe位於同一文件夾中。 這是Windows應用程序的標准設計。 主要原因是在加載dll時,包含導出函數引用(由lib提供)的exe調用駐留在dll中的這些函數的實現。

您可以將dll放入system32文件夾中,該文件夾通常位於C:\\ Program文件或c:\\ windows文件夾中,具體取決於操作系統類型32 / 64bit等,因為它們被定義為Windows中的系統環境路徑/變量。

將始終優先選擇exe駐留路徑,然后是上述路徑。 請確保該dll的副本沒有出現在system32中,例如類似的文件夾,因為該exe可能會加載這些dll的功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM