<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: MSVC與CRT的恩怨情仇</title>
	<atom:link href="http://blog.monkeypotion.net/gameprog/beginner/love-and-hate-between-msvc-and-crt/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.monkeypotion.net/gameprog/beginner/love-and-hate-between-msvc-and-crt</link>
	<description>遊戲開發‧遊戲程式‧遊戲設計</description>
	<lastBuildDate>Wed, 10 Mar 2010 14:13:19 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: 半路</title>
		<link>http://blog.monkeypotion.net/gameprog/beginner/love-and-hate-between-msvc-and-crt/comment-page-1#comment-3783</link>
		<dc:creator>半路</dc:creator>
		<pubDate>Thu, 25 Feb 2010 08:45:26 +0000</pubDate>
		<guid isPermaLink="false">http://blog.monkeypotion.net/?p=954#comment-3783</guid>
		<description>@Larz:
謝謝你提供的測試資訊。不知道你有沒有搜尋所有檔案目錄下的 dll 呢？據我的使用經驗，Microsoft 的這些 dll 經常不只出現在一個檔案目錄底下而已。另外，應用程式的 dll 搜尋路徑也有可能不同於預設值。

@Shark:
即使是在 Linux 環境中，函式庫的版本相容性依舊是個棘手問題，只希望未來的作業系統，能夠實作出更創新更完善的解決方案。</description>
		<content:encoded><![CDATA[<p>@Larz:<br />
謝謝你提供的測試資訊。不知道你有沒有搜尋所有檔案目錄下的 dll 呢？據我的使用經驗，Microsoft 的這些 dll 經常不只出現在一個檔案目錄底下而已。另外，應用程式的 dll 搜尋路徑也有可能不同於預設值。</p>
<p>@Shark:<br />
即使是在 Linux 環境中，函式庫的版本相容性依舊是個棘手問題，只希望未來的作業系統，能夠實作出更創新更完善的解決方案。</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Shark</title>
		<link>http://blog.monkeypotion.net/gameprog/beginner/love-and-hate-between-msvc-and-crt/comment-page-1#comment-3759</link>
		<dc:creator>Shark</dc:creator>
		<pubDate>Fri, 19 Feb 2010 16:35:52 +0000</pubDate>
		<guid isPermaLink="false">http://blog.monkeypotion.net/?p=954#comment-3759</guid>
		<description>@Larz:
我不是已經找到解法了嗎？

1.其他函式庫如libpng也要用靜態連結至glibc的版本，不然無法build
2.package會綁函式庫和發行版版本，會對玩家造成困擾，而且使用package會修改系統資訊，不符合綠色軟體的精神
我的要求是安裝時光碟放進去按幾下滑鼠搞定，移除時刪除資料夾即可

正是因為Linux有使用上不方便的缺點所以要設法改良
我做到現在需要避開的符號就只有__stack_chk_fail一個，實際試過沒問題，放心
而且這只是一時的，等使用glibc 2.3的發行版(如Debian 4)漸漸被淘汰就不用再這麼做</description>
		<content:encoded><![CDATA[<p>@Larz:<br />
我不是已經找到解法了嗎？</p>
<p>1.其他函式庫如libpng也要用靜態連結至glibc的版本，不然無法build<br />
2.package會綁函式庫和發行版版本，會對玩家造成困擾，而且使用package會修改系統資訊，不符合綠色軟體的精神<br />
我的要求是安裝時光碟放進去按幾下滑鼠搞定，移除時刪除資料夾即可</p>
<p>正是因為Linux有使用上不方便的缺點所以要設法改良<br />
我做到現在需要避開的符號就只有__stack_chk_fail一個，實際試過沒問題，放心<br />
而且這只是一時的，等使用glibc 2.3的發行版(如Debian 4)漸漸被淘汰就不用再這麼做</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Larz</title>
		<link>http://blog.monkeypotion.net/gameprog/beginner/love-and-hate-between-msvc-and-crt/comment-page-1#comment-3749</link>
		<dc:creator>Larz</dc:creator>
		<pubDate>Wed, 17 Feb 2010 09:12:32 +0000</pubDate>
		<guid isPermaLink="false">http://blog.monkeypotion.net/?p=954#comment-3749</guid>
		<description>@Shark
你不希望自己寫的程式拿到其他發行版就不能用，這解法很簡單阿，怎麼會變成抱怨linux使用上一點都不自由?這表示你對linux環境不熟悉

1.最簡單的解法，靜態連結glibc_2.4，這樣到任何發行版都不會有問題
2.複雜的解法，在打包上(tarball,RPM)下功夫，缺什麼lib在安裝時自動下載搞定。不過各大發行版的打包機制不同，這解法的適用範圍也小

你用hack的方式繞過glibc版本檢查，使得可以在低版本的glibc執行。這可能會發生無法預期的&quot;執行時錯誤&quot;，結果還不是要回頭用glibc_2.4

@半路
我在XP上測試系統是否會自動尋找相容的crt(更高的版本)，例如firefox依賴msvcrt.dll, msvcr70.dll。

之後將msvcr70.dll改名為msvcrt.dll.bak，再將firefox重新啟動，看看會不會自動載入msvcr80.dll。

結果非常有趣，firefox可以正常啟動，但msvcr70.dll或msvcr80.dll都不見蹤影，似乎少了這個dll也不會任何影響，不過還是無法證實原本的假設。</description>
		<content:encoded><![CDATA[<p>@Shark<br />
你不希望自己寫的程式拿到其他發行版就不能用，這解法很簡單阿，怎麼會變成抱怨linux使用上一點都不自由?這表示你對linux環境不熟悉</p>
<p>1.最簡單的解法，靜態連結glibc_2.4，這樣到任何發行版都不會有問題<br />
2.複雜的解法，在打包上(tarball,RPM)下功夫，缺什麼lib在安裝時自動下載搞定。不過各大發行版的打包機制不同，這解法的適用範圍也小</p>
<p>你用hack的方式繞過glibc版本檢查，使得可以在低版本的glibc執行。這可能會發生無法預期的&#8221;執行時錯誤&#8221;，結果還不是要回頭用glibc_2.4</p>
<p>@半路<br />
我在XP上測試系統是否會自動尋找相容的crt(更高的版本)，例如firefox依賴msvcrt.dll, msvcr70.dll。</p>
<p>之後將msvcr70.dll改名為msvcrt.dll.bak，再將firefox重新啟動，看看會不會自動載入msvcr80.dll。</p>
<p>結果非常有趣，firefox可以正常啟動，但msvcr70.dll或msvcr80.dll都不見蹤影，似乎少了這個dll也不會任何影響，不過還是無法證實原本的假設。</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: 半路</title>
		<link>http://blog.monkeypotion.net/gameprog/beginner/love-and-hate-between-msvc-and-crt/comment-page-1#comment-3203</link>
		<dc:creator>半路</dc:creator>
		<pubDate>Mon, 07 Dec 2009 16:59:29 +0000</pubDate>
		<guid isPermaLink="false">http://blog.monkeypotion.net/?p=954#comment-3203</guid>
		<description>@Roger:
不客氣。 ：）

@Shark:
Linux 底下遭遇到的情形我就不清楚了。想寫 Linux 遊戲的人可以嘗試看看。</description>
		<content:encoded><![CDATA[<p>@Roger:<br />
不客氣。 ：）</p>
<p>@Shark:<br />
Linux 底下遭遇到的情形我就不清楚了。想寫 Linux 遊戲的人可以嘗試看看。</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Shark</title>
		<link>http://blog.monkeypotion.net/gameprog/beginner/love-and-hate-between-msvc-and-crt/comment-page-1#comment-3176</link>
		<dc:creator>Shark</dc:creator>
		<pubDate>Tue, 01 Dec 2009 02:58:49 +0000</pubDate>
		<guid isPermaLink="false">http://blog.monkeypotion.net/?p=954#comment-3176</guid>
		<description>Linux glibc的問題找到一個解決方法，其實很簡單，找不到符號自己定義一個就好了
例如用objdump -T查到有GLIBC_2.4 __stack_chk_fail就在自己的code找個地方像下面定義
void __stack_chk_fail(){
  return;
}
build出來再檢查就沒有GLIBC_2.4了，也能在glibc 2.3執行，總之記得用objdump檢查一下

對想寫Linux程式的人應該會有用</description>
		<content:encoded><![CDATA[<p>Linux glibc的問題找到一個解決方法，其實很簡單，找不到符號自己定義一個就好了<br />
例如用objdump -T查到有GLIBC_2.4 __stack_chk_fail就在自己的code找個地方像下面定義<br />
void __stack_chk_fail(){<br />
  return;<br />
}<br />
build出來再檢查就沒有GLIBC_2.4了，也能在glibc 2.3執行，總之記得用objdump檢查一下</p>
<p>對想寫Linux程式的人應該會有用</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Roger</title>
		<link>http://blog.monkeypotion.net/gameprog/beginner/love-and-hate-between-msvc-and-crt/comment-page-1#comment-3164</link>
		<dc:creator>Roger</dc:creator>
		<pubDate>Sat, 28 Nov 2009 13:54:22 +0000</pubDate>
		<guid isPermaLink="false">http://blog.monkeypotion.net/?p=954#comment-3164</guid>
		<description>受教了, 感謝詳細的解釋~</description>
		<content:encoded><![CDATA[<p>受教了, 感謝詳細的解釋~</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: 半路</title>
		<link>http://blog.monkeypotion.net/gameprog/beginner/love-and-hate-between-msvc-and-crt/comment-page-1#comment-2255</link>
		<dc:creator>半路</dc:creator>
		<pubDate>Tue, 12 May 2009 14:54:10 +0000</pubDate>
		<guid isPermaLink="false">http://blog.monkeypotion.net/?p=954#comment-2255</guid>
		<description>@Shark:
我覺得 Linux 使用上很自由阿～

但是為了享受自由的好處，也必須付出相對的代價，深入學習如何善用 Linux 的威力。在 Linux 上開發程式，除了需要注意最基本的 kernel 版本以外，GCC 的版本以及其他相依函式庫的版本，也是不可不注意的重要議題。</description>
		<content:encoded><![CDATA[<p>@Shark:<br />
我覺得 Linux 使用上很自由阿～</p>
<p>但是為了享受自由的好處，也必須付出相對的代價，深入學習如何善用 Linux 的威力。在 Linux 上開發程式，除了需要注意最基本的 kernel 版本以外，GCC 的版本以及其他相依函式庫的版本，也是不可不注意的重要議題。</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Shark</title>
		<link>http://blog.monkeypotion.net/gameprog/beginner/love-and-hate-between-msvc-and-crt/comment-page-1#comment-2246</link>
		<dc:creator>Shark</dc:creator>
		<pubDate>Sat, 09 May 2009 17:18:29 +0000</pubDate>
		<guid isPermaLink="false">http://blog.monkeypotion.net/?p=954#comment-2246</guid>
		<description>這星期發生了在Ubuntu 8.04 build的程式不能在Debian 4執行的問題
查了一下得知是libc版本不同的關係，Ubuntu build出來的版本需要函式庫裡有GLIBC_2.4這個符號，但Debian的只有到GLIBC_2.0(Debian的軟體通常都比較舊)
雖然已經知道Linux是個幾乎無版本間相容性的系統，但發生這種事還是覺得很鳥，我當然不希望自己寫的程式拿到其他發行版就不能用，決定把Ubuntu 8.04有提供的GCC 3.3到4.2版全部下載來研究，可能也需要研究其他發行版的libc版本

用Linux一段時間後覺得Linux普及不起來不是沒有原因的，版權自由但使用上一點都不自由</description>
		<content:encoded><![CDATA[<p>這星期發生了在Ubuntu 8.04 build的程式不能在Debian 4執行的問題<br />
查了一下得知是libc版本不同的關係，Ubuntu build出來的版本需要函式庫裡有GLIBC_2.4這個符號，但Debian的只有到GLIBC_2.0(Debian的軟體通常都比較舊)<br />
雖然已經知道Linux是個幾乎無版本間相容性的系統，但發生這種事還是覺得很鳥，我當然不希望自己寫的程式拿到其他發行版就不能用，決定把Ubuntu 8.04有提供的GCC 3.3到4.2版全部下載來研究，可能也需要研究其他發行版的libc版本</p>
<p>用Linux一段時間後覺得Linux普及不起來不是沒有原因的，版權自由但使用上一點都不自由</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: 半路</title>
		<link>http://blog.monkeypotion.net/gameprog/beginner/love-and-hate-between-msvc-and-crt/comment-page-1#comment-2105</link>
		<dc:creator>半路</dc:creator>
		<pubDate>Mon, 30 Mar 2009 13:14:09 +0000</pubDate>
		<guid isPermaLink="false">http://blog.monkeypotion.net/?p=954#comment-2105</guid>
		<description>@CHL:
你好，

在 Windows 平台下，一般常見以 .lib 副檔名結尾的檔案，即是所謂的「靜態連結程式庫」(statically linked library)；而以 .dll 副檔名結尾的檔案，則是「動態連結程式庫」(dynamically linked library)。兩者間最大的不同之處，就是靜態連結程式庫會在程式碼的建置時期，與你所寫的程式碼進行連結，並寫入程式的可執行檔 (.exe) 內，所以你的執行檔不需要包含 .lib 檔案一起發佈給使用者。而動態連結程式庫則會以獨立的形式存在，你寫的程式碼會在執行時期才去載入 .dll 內的程式庫，因此執行檔需要包含著 .dll 檔案一起發佈給使用者。

關於 Win32 Programming，必讀的書當然就是 Charles Petzold 所寫的聖經《Programming Windows》囉！這本書有中文版，然後具有跟磚頭差不多的厚度，看起來非常嚇人。不過我認為，初學者只要先把前面六、七個章節讀完學會，就可以有不錯的基礎了～ ：）</description>
		<content:encoded><![CDATA[<p>@CHL:<br />
你好，</p>
<p>在 Windows 平台下，一般常見以 .lib 副檔名結尾的檔案，即是所謂的「靜態連結程式庫」(statically linked library)；而以 .dll 副檔名結尾的檔案，則是「動態連結程式庫」(dynamically linked library)。兩者間最大的不同之處，就是靜態連結程式庫會在程式碼的建置時期，與你所寫的程式碼進行連結，並寫入程式的可執行檔 (.exe) 內，所以你的執行檔不需要包含 .lib 檔案一起發佈給使用者。而動態連結程式庫則會以獨立的形式存在，你寫的程式碼會在執行時期才去載入 .dll 內的程式庫，因此執行檔需要包含著 .dll 檔案一起發佈給使用者。</p>
<p>關於 Win32 Programming，必讀的書當然就是 Charles Petzold 所寫的聖經《Programming Windows》囉！這本書有中文版，然後具有跟磚頭差不多的厚度，看起來非常嚇人。不過我認為，初學者只要先把前面六、七個章節讀完學會，就可以有不錯的基礎了～ ：）</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: CHL</title>
		<link>http://blog.monkeypotion.net/gameprog/beginner/love-and-hate-between-msvc-and-crt/comment-page-1#comment-2061</link>
		<dc:creator>CHL</dc:creator>
		<pubDate>Fri, 27 Mar 2009 09:14:51 +0000</pubDate>
		<guid isPermaLink="false">http://blog.monkeypotion.net/?p=954#comment-2061</guid>
		<description>版大你好,
  因為最近在學Win32 programming, 找資料時看到這篇文章, 但有些觀念還不是很清楚, 煩請版大指教.
  請問 xxx.lib 和xxx.dll 他們之間有什麼差別?
  尤其是動態連結版本的lib和 DLL之間有什麼不一樣嗎?
  這個問題困擾我很久, 雖然照用就是了, 但還是想弄清楚.

  另, 請問版大, 要把Win32 programming學好, 版大有推薦的書籍嗎? 謝謝.</description>
		<content:encoded><![CDATA[<p>版大你好,<br />
  因為最近在學Win32 programming, 找資料時看到這篇文章, 但有些觀念還不是很清楚, 煩請版大指教.<br />
  請問 xxx.lib 和xxx.dll 他們之間有什麼差別?<br />
  尤其是動態連結版本的lib和 DLL之間有什麼不一樣嗎?<br />
  這個問題困擾我很久, 雖然照用就是了, 但還是想弄清楚.</p>
<p>  另, 請問版大, 要把Win32 programming學好, 版大有推薦的書籍嗎? 謝謝.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
