我有一个依赖库(libfcgi),我使用以下调用用g++(GCC v4.4 MinGW)进行了编译:



现在,我的主要项目是这样构建的:



g++显然找到了libfcgi.a,但是它无法链接到以下引用:



在libfcgi源文件中,这些函数的定义如下:

#ifdef __cplusplus
extern "C" {
#endif
//...
DLLAPI int FCGI_printf(const char *format, ...);
DLLAPI int FCGI_Accept(void);
//...
#ifdef __cplusplus
}
#endif

其中DLLAPI无效(因为它未编译为共享库),并且定义了__cplusplus(g++)。

查看libfcgi.a,这些函数将导出为'_FCGI_Accept'和'_FCGI_printf',因此前面带有下划线。那似乎是阻碍g++找到它们的原因。

我认为使用export“C”足以链接到C++中的C函数,那么我在做什么错呢?

谢谢 :)

最佳答案

如果您在.cpp源代码中具有相同的外部“C”定义,那么我认为您的问题是-lfcgi应该在命令行中跟随* .cpp:

g++ -Idependancies\libfcgi\include -Ldependancies -O2 *.cpp -lfcgi

08-16 09:25