2013-01-09 30 views
2

這是我第一次創建的.lib文件,我有以下的C++ .exe項目:創建的.lib文件 - 第一次

#include<stdio.h> 

#pragma comment(lib, "mylib.lib") 

int myFunction(void); 

void main() 
{ 
    myFunction(); 

} 

和其他C項目(.LIB項目)

int __cdecl myFunction(void) 
    { 
    } 

我正在編譯.lib文件「mylib.lib」,並將其放入我的exe文件的編譯目錄中,但我收到「錯誤LNK2019:無法解析的外部符號」錯誤,我忘記了一些東西?

+0

其中,'main'的返回類型。這是C還是C++? –

+0

你是對的,我忘了「空白」。第一個項目是C++,而第二個是C# –

+0

您是否使[LINK](http://msdn.microsoft.com/en-us/library/ba1z7822(v = vs.80).aspx)< - (使用VS)編譯器將該lib添加到proyect中? –

回答

3

正常情況下,您爲lib提供一個頭文件,並將其包含在lib和用戶中。

首先,你應該在函數聲明中使用extern關鍵字。因爲你所指定的調用約定__cdecl你應該是一致的:

mylib.h

extern int __cdecl myFunction(void); 

mylib.cpp

#include "mylib.h" 

int __cdecl myFunction(void) 
{ 
    return 42; 
} 

libuser.cpp

#include <stdio.h> 
#include "mylib.h" 

#pragma comment(lib, "mylib.lib") 

int main(void) 
{ 
    printf("The answer to the question is %d\n", myFunction()); 
    return 0; 
} 

編輯 - 名字改編...

我剛纔看到你的約是C和C++項目註釋。在這種情況下,您必須幫助編譯器進行符號修改。在你的頭文件中,你這樣做:

#ifdef __cplusplus 
extern "C" { 
#endif 

extern int __cdecl myFunction(void); 

#ifdef __cplusplus 
} 
#endif 
+0

該死的我不斷收到「未解析的外部符號myFunction參考功能主」 –

+0

請檢查並仔細檢查您的大小寫,返回類型和參數列表。它必須匹配到處。確保你已經處理了我在編輯中提到的C++名稱。確保你使用了'extern'關鍵字。並確保你已經複製了正確的庫,並且你的項目正在尋找正確的位置。它可能正在其他地方拾取舊版本。 – paddy

+0

我認爲這不再是一個名字的修復問題,因爲這裏是dumpbin/symbols輸出:「13B 00000000 SECT5 notype()External | _myFunction」,所以函數被導出...仍然我的cpp程序看不到它。我已經doublechecked每個字符串 –