VC程式呼叫動態庫,編譯時候也跟著編譯動態庫 50

2025-07-14 03:45:17 字數 2319 閱讀 4527

vc程式呼叫動態庫,編譯時候也跟著編譯動態庫

1樓:直道雄

不太清楚你的工程是如何建立的,想必乙個工程是生成動態鏈結庫,另乙個是呼叫程式exe了。由於vc動態庫有兩種形式,regular和extended兩種,其中一種睜羨信能匯出類,另一種只能匯出變數和函式。如果匯出的是類,你在編譯exe檔案時自然需要用到類得宣告檔案,即你前面所說的動態庫本身所引用的檔案。

派鉛如果匯出的是悉輪函式或變數,有可能出現的情況是:一般為了**的重用性,把需要匯出的函式或變數單獨放在乙個標頭檔案中,用乙個巨集控制其匯入、匯出。編譯動態庫時,巨集定義為匯出,編譯exe時,巨集變為匯入,這個標頭檔案為兩者共用。

如果不小心在這個標頭檔案中包含了其他標頭檔案,也可能出現你說的情況。如果動態庫呼叫直接採用函式入口位址的方法,則什麼都不用宣告,當然,只適用於匯出函式與變數的情形。

2樓:網友

不太明白你的意思!如果你想在除錯的時碧脊候跟蹤進入到dll的**中,你需要指定一源螞個容器。在vc++或者vs 2005的除錯工具中有這個選項,你可以試悔裂滲試看!

3樓:匿名使用者

你可能是在乙個解決方案裡,建立了2個專案,暫且稱為dll專案,和exe專案。

就算你沒有設定專案相關性,vs也會自動生成全部內容,因為exe專案的呼叫了dll專案的專案。

你可以試試把dll專案生成的dll檔案匯出。

新建另外乙個exe解決御睜碼方案,專案鎮哪名稱假設為exe2,你在exe2中新增對dll檔案的引用就好了。這樣就不早橘會在編譯動態庫了。

動態庫編譯詳解

4樓:亞浩科技

當前類介紹: (upper) 依賴於。

說明:當執行可執行程式的時候,需要去/lib. /user/lib下和ld_library_path下尋找so.並不會在當前目錄下尋找。

所以執行。/會報錯。如下:

解決方案:指定。so執行搜尋路徑

1.-wl,-rpath ./mypath 加入引數,並且將 copy到。/mypath目錄下。

2.設定ld_library_path,指定目錄。

說明:指定了-wl,-rpath, 設定ld_library_path也是可以生效的。並不是說只會去-wl,-rpath下尋找。

首先生成乙個,然後用去依賴, 然後 再去依賴。

說明:這裡編譯的巧晌時候直接出錯,是因為沒有指定搜尋路徑,所以無法通過編譯。

解決編譯問題方案。

1.我們依然採用ld_library_path的方式可以解決編譯和執行的問題。

2.生成libplay的時候孝亂鋒,直接指定-wl,-rpath 給libbottom.可以解決編譯不通過的問題。

3.依賴所有庫

依賴所有庫只能解決編譯問題,無法處理執行的路徑。

另一種思路:我們在執行的時候 執行-wl,-rpath.並不在生成libplay的時候指定,看下是否正常。

由此可見,-wl,-rpath 只能針對直接依賴的指定了路徑,但是libbottom還是無法查詢到 .但是ld_library是可以的。

rpath只能對直接依賴的so設定搜尋目錄,並且可以設定所有依賴的編譯路徑。

總結: 解決編譯問題,在生成libplay的時候指定-wl,-rpath執行路徑,或者設定ld_libraray_path,都可以解決這個問題。

當我們現在擁有的so包含乙個直接依賴的so和很多間接依賴的so,但是沒有設定rpath.所以是不能直接依賴主so進行編譯和執行的。

為了通過編譯:

1.在只鏈結主so的情況下可以去設定rpath或者ld_library_path.

2.或者鏈結所有so.

為了通過執行:

為了正常執行可以設定ld_library_path.

--disable-new-dtags,--copy-dt-needed-entries

結論概述:

1.我們在生成間接依賴的庫的時候,為了保證其他庫可以直接依賴陪拿,需要加入-wl,-rpath.保證編譯通過。

可以解決一切編譯執行問題。

關於動態庫呼叫的問題

動態呼叫的時候指標名不需要和原dll中函式一樣。基本過程是這樣的 hmudole hmodle getmudulehandle 你要使用的dll名字 proc fun proc getprocaddress hmodule,dll中函式名 然後將fun轉換成你的函式形式,比如你要呼叫的dll中函式是...

VC 小應用程式問題

vc .的問題,乙個小程式 程式 如下。include include 增加標頭檔案。using namespace std int main 應用程式問題 不能為讀 一般是系統的問題 也有可能是記憶體。系統的可能性很大 如果防毒,清理磁碟,清理登錄檔後,整理完碎片 以後還是有問題,建議重灌系統。為什麼...

jquery動態新增子元素後,呼叫其他js無效

要在動態新增後將新增後標籤進行事件繫結才行,如像這樣就可以了 要對動態新增的標籤進行事件繫結。如 into html test into span live click function live 事件是對後期動態新增的內元素繫結事件。容 關於jquery動態新增html元素後繫結其他js的問題,求...