關於windows下程式設計動態庫連結問題
阿新 • • 發佈:2020-12-24
技術標籤:linuxvscode學習筆記cmakedllc++windows 10
關於windows下程式設計動態庫連結問題
文章目錄
背景
本來開發工作都是在ubuntu
下進行的,最近搞一個跨平臺產品的驅動,結果拿到的sdk
在ubuntu
下跑不起來,便想著看能不能再windows
下先跑起來,但是之前也沒有windows
平臺的開發經驗,折騰了半天還是沒搞定,請教了同事才得以解決,做個簡單的記錄。
動態庫
windows
下的動態庫分為xxx.lib
xxx.dll
,之前一直沒懂,經同事講解才知道.lib
是編譯時用到的,.dll
是執行時用到的。且windows
下動態庫前不用像ubuntu
下需要加上lib
的字首(如libxxx.so
)
遇到的問題
使用vscode
+cmake
因為ubuntu
下開發用的是vscode
+cmake
,又都是跨平臺的,所以最開始決定在windows
環境下也這麼整,理論上是沒問題的,但我遇到了兩個關於動態庫的問題:
- 動態庫連結不上
目錄結構(其中lib
字首是我自己加的,誤以為跟ubuntu
一樣)
lib
└── libxxx.lib
CMakeLists.txt
link_directories(${PROJECT_SOURCE_DIR}/lib) ADD_EXECUTABLE(demo src/examples.cpp) target_link_libraries(demo xxx)
後面發現將xxx
改為libxxx
就可以了
或者用另外一種寫法也是可以的
target_link_libraries(demo ${PROJECT_SOURCE_DIR}/lib/libxxx.lib)
- 能夠編譯成功,但執行時找不到動態庫
error while loading shared libraries: xxxx.dll: cannot open shared object file: No such file or directory
後來才知道必須要把xxx.dll
的檔案拷貝到生成的可執行檔案demo.exe
同目錄下就可以了
使用visual studio
畢竟宇宙第一IDE
(只是我基本不用),在最開始用vscode
vs
來連結動態庫好了
偷懶了,直接用vs
打開了vscode
的cmake
工程,雖然是以開啟資料夾形式開啟的,可還是識別成了cmake
工程,就用不了專案屬性來手動連結動態庫,重新新建一個空專案就好了
在專案-屬性頁直接配置標頭檔案(C/C++-常規)和動態庫.lib
(連結器-常規:配置動態庫目錄/輸入:配置動態庫名稱)就好了,編譯完執行的時候同樣需要把.dll
動態庫拷到Debug
路徑下。
看來windows
下程式設計和linux
下還是不一樣
以上,做此筆記