c++ - g++ 链接问题

标签 c++ c linker g++

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

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++ 找到它们的原因。

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

谢谢:)

最佳答案

如果您的 .cpp 源代码中有相同的 extern "C"定义,那么我认为您的问题是 -lfcgi 应该跟在命令行中的 *.cpp 之后:

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

关于c++ - g++ 链接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2347195/

相关文章:

c - 使用宏选择文件

c - 如何读取整数值,直到在C中敲击字符 'o'?

c - 将图书馆中的图书馆与外部人员联系起来?

ios - 错误: "_OBJC_CLASS_$_NgnEngine"

c++ - 如何在 IR 中表示数学域?

C++ 复制构造函数

c++ - 轴对齐边界框碰撞 : what sides are colliding

c++ - 为什么 std::get for variant 会引发失败而不是未定义的行为?

c - Malloc 返回相同的值 - 没有双重释放错误

c++ - 离线虚拟方法