1. 程式人生 > 其它 >關於windows下程式設計動態庫連結問題

關於windows下程式設計動態庫連結問題

技術標籤:linuxvscode學習筆記cmakedllc++windows 10

關於windows下程式設計動態庫連結問題

文章目錄

背景

本來開發工作都是在ubuntu下進行的,最近搞一個跨平臺產品的驅動,結果拿到的sdkubuntu下跑不起來,便想著看能不能再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打開了vscodecmake工程,雖然是以開啟資料夾形式開啟的,可還是識別成了cmake工程,就用不了專案屬性來手動連結動態庫,重新新建一個空專案就好了

專案-屬性頁直接配置標頭檔案(C/C++-常規)和動態庫.lib連結器-常規:配置動態庫目錄/輸入:配置動態庫名稱)就好了,編譯完執行的時候同樣需要把.dll動態庫拷到Debug路徑下。

看來windows下程式設計和linux下還是不一樣

以上,做此筆記