2009年2月26日 星期四

[Windows] Microsoft Visual Studio 2005 Link Error : using extern in c

因緣際會,看著別人把 C 的程式碼轉成 C++ ,然後原本的程式碼在 vs 2005 上編譯,就產生了 Link Error 。


要將 C 的程式碼弄成 C++ 編譯時可以吃的 object 的方式,目前碰到而處理的:



  1. 在 header file 中的變數宣告,要加上 extern 字樣,同理也得找個地方正式宣告,如 main.c 是不錯的地方。

  2. 接著,對於一些 C function 裡的 type 要詳細地敘述,儘管只是 void * ,例如 malloc 回傳的東西,如果接的 pointer 是 char * 的話,就得用 (char*)malloc 的方式使用。


至於出現 Link Error 的部分,有個現象會說找不到 _VARNAME 的定義,然而卻有定義 VARNAME 的變數,這次我發現的情況,是由於 header file 中用 extern 宣告出陣列,然後在 main.c 中並未完整地宣告陣列,例如:



  • header file:

    • extern in my_array[100];



  • main.c:

    • int my_array[];




這個情況,以 VS 2005 的環境,如果仍然用 main.c 來編譯,就會出現 link error ,其訊息類似找不到 _my_array 的樣子,至於解法有兩種:



  1. 將 main.c 更名為 main.cpp ,在 cpp 的規則下可以編過

  2. 將 main.c 中的 int my_array[]; 宣告,更新成 int my_array[100]; 即可


本身沒在研究語言,算是誤打誤撞解決的。


沒有留言:

張貼留言