我有從中導出函數f()
並從其他C++項目中調用它的C項目,它工作正常。但是,當我呼叫內部的其他功能g()
時,我得到LNK2028錯誤。從C++包裝器調用導出的C函數時出錯LNK2028
C
項目的小例子,看起來像:
Test.h
#ifndef TEST_H
#define TEST_H
#include "myfunc.h"
#define EXTERN_DLL_EXPORT extern "C" __declspec(dllexport)
EXTERN_DLL_EXPORT void f()
{
g(); // this will provide LNK2028 if f() is called from other project
}
#endif
myfunc.h
void g();
myfunc.c
#include "myfunc.h"
void g(){}
的幻燈ct本身正在建造中。然而,當我打電話從其他C++/CLI
項目這個功能
#include "Test.h"
public ref class CppWrapper
{
public:
CppWrapper(){ f(); } // call external function
};
我得到錯誤:
error LNK2028: unresolved token (0A00007C) "void __cdecl g(void)" ([email protected]@$$FYAXXZ) referenced in function "extern "C" void __cdecl f(void)" ([email protected]@$$J0YAXXZ) main.obj CppWrapper
error LNK2019: unresolved external symbol "void __cdecl g(void)" ([email protected]@$$FYAXXZ) referenced in function "extern "C" void __cdecl f(void)" ([email protected]@$$J0YAXXZ) main.obj CppWrapper
其他細節:
- 我設置的x64平臺整體解決方案
- 在CppWrapper我包括來自C項目的
.lib
文件
嘗試在另一個源文件而不是頭中聲明'f'的主體。這是否解決了您的問題? –
@MaxTruxa不,在'Test.c'中包含'Test.h'時,我在'void f()'之前爲'EXTERN_DLL_EXPORT'的C2059編譯錯誤。 – Dejan
從源文件中刪除'EXTERN_DLL_EXPORT'。您只需將其包含在頭文件中。 –