当前位置:  开发笔记 > 小程序 > 正文

C库未使用gcc/g ++进行链接

如何解决《C库未使用gcc/g++进行链接》经验,为你挑选了1个好方法。

我有一个我在gcc中使用的c库.该库具有扩展名.lib,但始终链接为静态库.如果我编写一个使用该库作为c代码的程序,那么一切都可以.但是,如果我将文件重命名为.cpp(在c/c ++中执行简单的操作),我会得到未定义的引用.这些是我为测试目的编写的简单小程序,因此没有花哨的东西.我编译使用:

gcc -g -Wall -I  -o program main.c customlibrary.lib -lm -lpthread

上面的作品就像一个魅力.然而:

g++ -g -Wall -I  -o program main.cpp customlibrary.lib -lm -lpthread

要么

gcc -g -Wall -I  -o program main.cpp customlibrary.lib -lm -lpthread -lstdc++

导致对customlibrary.lib中任何函数的未定义引用.我尝试创建一个名为customlibrary.a的符号链接,但没有运气.

为什么g ++不能识别我的库.不幸的是我无法访问库的源代码,但是将c-lib链接到c ++应该不是问题吧?



1> RBerteig..:

您的库似乎有一个API,假定它将从C而不是C++调用.这很重要,因为C++有效地要求从库中导出的符号中包含的信息多于函数名称.这是通过"名称修改"功能来处理的.

我假设您的库有一个声明其公共接口的包含文件.为了使它与C和C++兼容,您应该安排告诉C++编译器它应该假定它声明的函数使用C的链接和命名.

测试这个的一个简单的答案就是这样做:

extern "C" {
#include "customlibrary.h"
}

在你的main.cpp而不是customlibrary.h直接包括.

要使头文件本身在两种语言中工作并正确地将其函数声明为C-C到C++,请将以下内容放在头文件的顶部附近:

#ifdef __cplusplus
extern "C" {
#endif

以及接近底部的以下内容:

#ifdef __cplusplus
}
#endif

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有