g ++链接问题

时间:2010-02-27 11:51:11

标签: c++ c linker g++

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

  

g ++ -Iinclude -c -O2 * .c
  ar rcs ../libfcgi.a * .o

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

  

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

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

  

'FCGI_printf'
  'FCGI_Accept将'

在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 ++找到它们。

我认为使用导出“C”就足以链接到C ++中的C函数,所以我做错了什么?

谢谢:)

2 个答案:

答案 0 :(得分:4)

如果你的.cpp源代码中有相同的extern“C”定义,那么我认为你的问题是-lfcgi应该遵循命令行中的* .cpp:

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

答案 1 :(得分:1)

在主项目中,由于extern "C",您告诉编译器链接C函数。因此,它期望未编码的符号名称。因此,您应该使用C编译器而不是C ++编译器编译fcgi-library。