我目前正在使用 CGO 通過 DLL 使用 C 中的庫。一切正常,我可以在庫之上使用我的代碼,構(gòu)建它等等。我遇到的問題是用 DLL 實(shí)現(xiàn)測試。現(xiàn)在我的項目看起來像:項目binding.go <- 定義 CGO 綁定探針.goprobes_test.go <- 使用包含 C defs 的結(jié)構(gòu)蜜蜂/庫/主程序我的庫.dll所以我的 lib 文件夾有所有 CGO 綁定和一個 Go 結(jié)構(gòu)在它上面(作為一種包裝)。并且探測器正在使用這個包裝器來公開一些信息。這樣做的問題go test是執(zhí)行上下文是在包內(nèi)設(shè)置的。這意味著 probes_test.go 在 apis/ 上下文中執(zhí)行并且看不到 DLL。使測試失敗并具有特殊的退出狀態(tài)。解決方法是暫時復(fù)制包中的 dll,例如:項目綁定.go探針.go探針測試.gomyLib.dll <- 已復(fù)制蜜蜂/庫/主程序我的庫.dll這行得通(測試通過)但是很笨拙而且不干凈。我還嘗試將 DLL 僅放在 lib/ 中,但兩者都不起作用。您是否有辦法指定 DLL 位于其他文件夾中以進(jìn)行測試?
1 回答

慕斯王
TA貢獻(xiàn)1864條經(jīng)驗 獲得超2個贊
如果您需要在執(zhí)行期間訪問來自其他路徑的 DLL,則必須通過向 PATH 環(huán)境變量添加額外的目錄來增加搜索路徑范圍:
SET PATH=<MY_LIB_DLL_DIR>;%PATH%
這樣,無論您從何處執(zhí)行程序,都可以找到 DLL。
在可重定位環(huán)境中進(jìn)行測試(在不同目錄中的不同系統(tǒng)上檢出)的推薦做法是打開一個控制臺,其中包含一個批處理文件,該批處理文件設(shè)置了構(gòu)建所需的環(huán)境。
echo off
:: ensure current dir is in directory of batchfile location
cd /D %~dp0
:: TODO replace dll_dir below your dll directory
pushd %dll_dir%
:: set path
set PATH=%CD%;%PATH%
popd
:: open console here
cmd /k
將此批處理文件放在項目的根目錄中,以從那里打開一個工作控制臺
- 1 回答
- 0 關(guān)注
- 147 瀏覽
添加回答
舉報
0/150
提交
取消