我們在用vc++寫軟體的時候一般都會為不同的dll proj配置生成不同的_ud/_u的lib和dll,在其他工程中參考的時候通過編譯選項在鏈接不同的lib,大家都是這樣做的。
我的問題是如果debug與release需要區分,32與64也需要區分,那我們需要維護四個lib,感覺debug與release的能否合并呢?難道只能是純c的嗎?
我看到一些商業的lib/dll只有release的,在自己工程中debug/release的時候用也沒有問題,但是自己寫的lib反而不行。不知道是哪里的問題導致的。
如果我假定現在有個lib的代碼很穩定,也不存在兼容性問題,debug/release能否合并成一個,有什么約束條件?合并完之后還要保證編譯、運行沒有問題。
uj5u.com熱心網友回復:
商業的lib/dll只有release的 是不想讓你 debuguj5u.com熱心網友回復:
release 即可。uj5u.com熱心網友回復:
自己做個例子,一個dll(隨便匯出一個函式或類),一個exe,在exe的debug狀態參考dll的release庫,看看報什么錯誤 。
uj5u.com熱心網友回復:
自己做個例子,一個dll(隨便匯出一個函式或類),一個exe,在exe的debug狀態參考dll的release庫,看看報什么錯誤 。
uj5u.com熱心網友回復:
回答之前可以看一下這個鏈接,http://blog.csdn.net/qq_28098067/article/details/51385394
uj5u.com熱心網友回復:
debug與release需要區分 是因為 里面的代碼都不一樣。uj5u.com熱心網友回復:
dll有好幾種方式,如果你dll改用匯出函式的方式,那你就不用區分release還是debug,如果用匯出類的方式,那必須區分,我的做法是每個工程分好幾種編譯方式,分別對應不同的dll和lib
32位:
1.x86_Debug
2.x86_Debugu
3.x86_Release
4.x86_Releaseu
64位:
1.x64_Debug
2.x64_Debugu
3.x64_Release
4.x64_Releaseu
uj5u.com熱心網友回復:
我還沒玩過64位的。。。一直默認32位 exe dll
uj5u.com熱心網友回復:
debug與release有區別, 是因它他們的設定不同, 如果你把debug與release的設定全部設定成相同, 那它們就沒有區別了.對外一般都只提供release版本的.
如果沒有特殊需求, 只提供一個32位版本應該也就夠了. 特殊需求的情況, 可能會區分32位與64位版本.
uj5u.com熱心網友回復:
現在軟體提供商提供的開發包只有release版本的lib/dll.我們在開發的時候debug與release都能用這個庫,而我們自己開發維護的lib/dll卻不行,搞不明白為什么,差在哪里?都是lib/dll為什么啊?
uj5u.com熱心網友回復:
我現在也是這么做,但是現在軟體提供商提供的開發包只有release版本的lib/dll.我們在開發的時候debug與release都能用這個庫,也沒有問題,搞不明白為什么,差在哪里?都是lib/dll為什么啊?誰愿意維護那么多個版本啊?我覺得肯定有方法。
uj5u.com熱心網友回復:
發布的時候,一般是Release,使用的時候,也都是Debug Release混用,但是有時候還是可能會觸發一些不可預知的問題。
所以如果可以的話,當然是對應版本的發布就好了。一般對于這么多版本,都可以用編譯腳本來處理。這樣就不需要人工處理了。
uj5u.com熱心網友回復:
肯定是可以的啊,你說不行的時候, 是報什么錯呢?
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
謝謝分享哦~~~uj5u.com熱心網友回復:
不懂 但是幫頂啊 2333uj5u.com熱心網友回復:
不懂 但是幫頂啊 2333uj5u.com熱心網友回復:
非常不錯。非常好。uj5u.com熱心網友回復:
新手報到,學到了不少東西啊uj5u.com熱心網友回復:
我們在用vc++寫軟體的時候一般都會為不同的dll proj配置生成不同的_ud/_u的lib和dll,在其他工程中參考的時候通過編譯選項在鏈接不同的lib,大家都是這樣做的。uj5u.com熱心網友回復:
我來學習的.uj5u.com熱心網友回復:
我是來賺取積分的uj5u.com熱心網友回復:
learning~uj5u.com熱心網友回復:
內容不錯 ~學習中~uj5u.com熱心網友回復:
同來學習下,非常感謝分享!uj5u.com熱心網友回復:
前來學習 內容可以·uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
貌似 http://blog.csdn.net/qq_28098067/article/details/51385394 里面有答案。uj5u.com熱心網友回復:
learning~uj5u.com熱心網友回復:
我現在也是這么做,但是現在軟體提供商提供的開發包只有release版本的lib/dll.我們在開發的時候debug與release都能用這個庫,也沒有問題,搞不明白為什么,差在哪里?都是lib/dll為什么啊?誰愿意維護那么多個版本啊?我覺得肯定有方法。
debug、release 區別在于編譯器對代碼編譯后的二進制進行優化。debug版本編譯的產品是沒有對代碼進行“優化的”你代碼寫的每一行代碼都完完全全的按照你寫的邏輯生成二進制匯編。這樣子的話是方便程式員對自己產品進行“除錯”
release生成的二進制代碼后還會對你編譯器的“優化配置”選項按照里面所配置的優化模式進行二進制級別的代碼優化,簡單來說就是移除多余的遍歷。分支優化,合并變數,變數由暫存器代替使用。 行內函式的整理。等等等等。詳細就去看看龍書相關的知識吧。
uj5u.com熱心網友回復:
樓主發在mfc板塊那么也是用vs系列的編譯器了。難道樓主就沒有過編譯release版本在不修改任何編譯配置的情況下來進行除錯嗎?你會發現你監視視窗里面再也不能“監視”每行回傳吧的變數了。而且單步的邏輯也會不太對。release和debug最大區別就是配置選項里面的“優化”項。 你把優化禁用掉就跟DEBUG沒什么區別。當然鏈接的庫不算。
uj5u.com熱心網友回復:
存在即合理。uj5u.com熱心網友回復:
release只在發布的時候用一下就好了。只要你的代碼里不固定某些的大小,都不會有問題。uj5u.com熱心網友回復:
路過 路過 路過 路過uj5u.com熱心網友回復:
好下回還是說這種話中
uj5u.com熱心網友回復:
learning~uj5u.com熱心網友回復:
學習賺積分,謝謝學哥指點交流uj5u.com熱心網友回復:
哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
學習了。謝謝分享。uj5u.com熱心網友回復:
自己寫的dll也可以只用release版exe在debug或release下,都只用release版的dll是可以的
當然這對代碼是有要求的,假如你的exe和dll傳遞的一個結構體,在debug和release下的定義不同,那么就會出問題
具體問題具體分析,你的debug模式的exe使用release版的dll出什么錯?
uj5u.com熱心網友回復:
謝謝 有用 幫大忙了uj5u.com熱心網友回復:
自己寫的dll也可以只用release版uj5u.com熱心網友回復:
自己寫的dll也可以只用release版suj5u.com熱心網友回復:
不用維護debug,輸出release即可uj5u.com熱心網友回復:
沒辦法,人生就是這么無奈,很多時候就是跟這些無聊的東西在打交道。你說作業系統都用win10多好了,非得有人用xp. vista win7 win8 win8.1。 然后你寫出的程式要在這些個作業系統上一個一個地試一遍。還要區分32 64位
uj5u.com熱心網友回復:


uj5u.com熱心網友回復:
總結的很全,好帖子uj5u.com熱心網友回復:
沒辦法,人生就是這么無奈,很多時候就是跟這些無聊的東西在打交道。
你說作業系統都用win10多好了,非得有人用xp. vista win7 win8 win8.1。 然后你寫出的程式要在這些個作業系統上一個一個地試一遍。還要區分32 64位
這還真沒轍,公司有些部門就全員標配各種忒舊的電腦,就只能跑xp,因為這些部門的成員平時很少用電腦,夠用了所以也沒得換。沒更古老的系統就不錯了
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
我也看到了,但是我現在使用的一個商業庫,就是只有release的lib/dll,在debug/release下呼叫都沒有問題。那豈不是與這篇檔案沖突了?
一個是實踐,一個貌似也是真理,但這兩個沖突了,我就想搞明白到底不同在什么地方?
uj5u.com熱心網友回復:
自己寫的dll也可以只用release版
exe在debug或release下,都只用release版的dll是可以的
當然這對代碼是有要求的,假如你的exe和dll傳遞的一個結構體,在debug和release下的定義不同,那么就會出問題
具體問題具體分析,你的debug模式的exe使用release版的dll出什么錯?
想問一下,代碼的要求有哪些?
我的錯誤如下:
error LNK2038: 檢測到“_ITERATOR_DEBUG_LEVEL”的不匹配項: 值“0”不匹配值“2”
error LNK2038: 檢測到“RuntimeLibrary”的不匹配項: 值“MD_DynamicRelease”不匹配值“MDd_DynamicDebug”
uj5u.com熱心網友回復:
C Run-Time Libraries http://msdn.microsoft.com/zh-cn/library/abx4dbyh(VS.80).aspxuj5u.com熱心網友回復:
商業的lib/dll只有release的 是不想讓你 debug
uj5u.com熱心網友回復:
error LNK2038: 檢測到“_ITERATOR_DEBUG_LEVEL”的不匹配項: 值“0”不匹配值“2”error LNK2038: 檢測到“RuntimeLibrary”的不匹配項: 值“MD_DynamicRelease”不匹配值“MDd_DynamicDebug”
使用到 debug 庫。 你的 dll 必須不 使用 debug 庫
uj5u.com熱心網友回復:
很棒的帖子,值得學習uj5u.com熱心網友回復:
C Run-Time Libraries http://msdn.microsoft.com/zh-cn/library/abx4dbyh(VS.80).aspx
沒明白您要表達的意思。
uj5u.com熱心網友回復:
error LNK2038: 檢測到“_ITERATOR_DEBUG_LEVEL”的不匹配項: 值“0”不匹配值“2”
error LNK2038: 檢測到“RuntimeLibrary”的不匹配項: 值“MD_DynamicRelease”不匹配值“MDd_DynamicDebug”
使用到 debug 庫。 你的 dll 必須不 使用 debug 庫
主要是不想同時維護debug與release兩個庫,而且別人也說可以只用release。
uj5u.com熱心網友回復:
C Run-Time Libraries http://msdn.microsoft.com/zh-cn/library/abx4dbyh(VS.80).aspx
沒明白您要表達的意思。
你的努力方向有誤。
既然大家都維護debug與release兩個庫,甚至維護
debug與release
單執行緒/多執行緒
靜態lib/動態dll
32位/64位
共2×2×2×2=16種庫,你覺得你能鶴立雞群嗎?
uj5u.com熱心網友回復:
release 即可。
自己做個例子,一個dll(隨便匯出一個函式或類),一個exe,在exe的debug狀態參考dll的release庫,看看報什么錯誤 。
回復后有訊息推送嗎?
uj5u.com熱心網友回復:
[quote=參考 2 樓 smw
每次參考都把原來的內容回顯,如果別人把上面的內容洗掉了,咋辦?uj5u.com熱心網友回復:
學習了![]()
uj5u.com熱心網友回復:
需要編譯成 _u/_ud 的是因為 dll 匯出的函式引數或者回傳值 可能用到了 std::string、CString 等型別,這些個型別的 debug/release 版本是不同的。用到 CString 的可能是因為dll 端用的 A/W ,而呼叫端用了 W/A 版的 CString ( CStringW / CStringA 的 UNICODE 與 非UNICODE的區別 )
這些包括但不限于這些情況,都會造成 dll 與呼叫者之間 產生 二進制兼容性問題。。
你能保證不產生這些問題,就可以了
uj5u.com熱心網友回復:
不懂 但是幫頂頂..........uj5u.com熱心網友回復:
不懂 但是幫頂啊 2333uj5u.com熱心網友回復:
學習,謝謝分享。uj5u.com熱心網友回復:
圍觀下,看起來不錯uj5u.com熱心網友回復:
一直用Delphi,如果用loadlibrary 動態加載,完全看不懂Release和debug版本有什么區別uj5u.com熱心網友回復:
不懂 但是幫頂啊 2333uj5u.com熱心網友回復:
沒辦法,人生就是這么無奈,很多時候就是跟這些無聊的東西在打交道。
你說作業系統都用win10多好了,非得有人用xp. vista win7 win8 win8.1。 然后你寫出的程式要在這些個作業系統上一個一個地試一遍。還要區分32 64位
確實,我還見過win2000的服務器,為了兼容,不得不另外單獨開發個模塊uj5u.com熱心網友回復:
通常發布用的是release版本,而debug版本用于自己的除錯。
如果不需要,可以把debug版本的編譯選項設定成和release完全一樣,那編譯出來的就應該和release版本一樣了,但那樣debug版本用于除錯的目的就沒有了,如果是這樣,那學不如直接把debug這個型別從編譯管理里面洗掉掉,就只剩下release版本了
通常,庫的呼叫者使用release版本的庫也可以除錯,這個肯定也是和其它商業發布的版本是一樣的,如果某些電腦上不行,那一般是依賴的檔案有問題導致的uj5u.com熱心網友回復:
受用了,謝謝大神們轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/68647.html
標籤:基礎類
