我現在處於鏈接器天堂。我有一個C庫,只有編譯在Visual C++(它可能是在海灣合作委員會的工作),如果:鏈接到編譯爲C++的C庫
- 我編譯爲C++代碼
- 定義
__cplusplus
這將導致所有聲明被封裝在extern "C" { }
所以,這樣做我有一個叫,比如靜態庫,bsbs.lib
現在,我有一個C++項目稱爲Tester
哪想調用函數在bsbs.h
中聲明的。一切順利的罰款,直到我嘗試,我得到了所有太熟悉的鏈接到bsbs.lib
:
Tester.obj : error LNK2001: unresolved external symbol _foofoo
而且這似乎總是foofoo
不能得到解決,無論哪個函數我稱之爲Tester
(barbar
或還要別的嗎)。
更新:我已根據要求對第2點進行了擴展。非常感謝幫助傢伙!
#ifndef _BSBS_H
#define _BSBS_H
/* Prevent C++ programs from name mangling these definitions. */
#ifdef __cplusplus
extern "C" {
#endif
#include <stdio.h>
#include <setjmp.h>
.......
.......
#ifdef __cplusplus
}
#endif
#endif /* _BSBS_H */
這就是「主」頭文件,可以這麼說。所有重要的功能都在這裏。但是還有其他頭文件bsbs.c
所調用的文件是而不是包含在extern "C" {}
中。
解決: OK,這是很奇怪的,但我刪除從bsbs
頭文件extern C
位,編譯它作爲一個C++項目(即使所有的文件都.c
並刪除了__cplusplus
定義)和有效!我在看符號列表後看到了這個想法。除之外的所有東西都被毀壞了,其中包含extern C
(doh)中的那些,並且它要求一個未摺疊的符號,所以我認爲有些問題是不對的。
而且您沒有在測試器代碼中的任何地方引用「_foofoo」? – 2010-06-14 21:13:29
你在第二點意味着什麼 - 我認爲我們需要看到一些代碼,因爲這可能是錯誤的 – Mark 2010-06-14 21:15:05
在你丟失的第三個庫中,'foofoo'是否存在,即bsbs.lib'需要別的東西嗎? – 2010-06-14 21:16:34