在C+中使用C*.so库+;在C项目(Ubuntu)中使用C*.so库的项目(Ubuntu) 我有一个动态库 LBY-FROUS.S/,在C中编写。当我把它链接到C项目(代码::块)时,一切都是可以的,但是当我把它链接到C++项目并使用这个库代码的函数::Bug给出错误:未定义的引用“函数名”< /C> > .P/> < P>你需要将原型定义为“代码>外”C。{prototype}以防止名称损坏。

在C+中使用C*.so库+;在C项目(Ubuntu)中使用C*.so库的项目(Ubuntu) 我有一个动态库 LBY-FROUS.S/,在C中编写。当我把它链接到C项目(代码::块)时,一切都是可以的,但是当我把它链接到C++项目并使用这个库代码的函数::Bug给出错误:未定义的引用“函数名”< /C> > .P/> < P>你需要将原型定义为“代码>外”C。{prototype}以防止名称损坏。,c++,c,C++,C,您需要将原型定义为extern“C”{prototype}以防止名称损坏。当您包含声明函数的头时,将该包含包装在extern“C”块中 extern "C" { #include "funcs.h" } C++使用名称Mangle来支持函数重载(其中它重命名一个函数,包括关于其参数类型的信息),而C只使用您提供函数的名称。因此,C++代码正在查找其被损坏的名称下的函数,而不是其真实名称。如果使用“代码>外部”C在函数声明的周围,这将导致C++编译器使用C风格的命名约定,而不是C++( ),当

您需要将原型定义为
extern“C”{prototype}
以防止名称损坏。

当您包含声明函数的头时,将该包含包装在
extern“C”
块中

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

C++使用名称Mangle来支持函数重载(其中它重命名一个函数,包括关于其参数类型的信息),而C只使用您提供函数的名称。因此,C++代码正在查找其被损坏的名称下的函数,而不是其真实名称。如果使用“代码>外部”C在函数声明的周围,这将导致C++编译器使用C风格的命名约定,而不是C++(

),当您包含声明函数的头时,将该包含括在<代码>外“C”< /C>块中。

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

C++使用名称Mangle来支持函数重载(其中它重命名一个函数,包括关于其参数类型的信息),而C只使用您提供函数的名称。因此,C++代码正在查找其被损坏的名称下的函数,而不是其真实名称。如果使用“代码>外部”C在函数声明的周围,这将导致C++编译器使用C风格的命名约定,而不是C++。< /p>我已经尝试过,但是它没有。help@PetrLivic我第一次搞错了,应该是

extern“C”
带引号。试试看;如果不起作用,你能粘贴一个简短完整的例子,说明什么不起作用,以及你的问题中出现的确切错误吗?你是说extern“C”void…;extern“C”void 2…;我试过了,但没有成功help@PetrLivic我第一次搞错了,应该是
extern“C”
加引号。试试看;如果不起作用,你能粘贴一个简短完整的例子,说明什么不起作用以及你的问题中出现的确切错误吗?你是说extern“C”void….;extern“C”void 2….;我需要在哪里定义原型?在你的头文件中。你可以在头文件中添加一条语句,名为
\ifdef\ucplusplusplus extern C在定义任何原型之前,在开头添加一个{endif
,在结尾添加另一个作为#ifdef u cplusplus}{endif。我需要在哪里定义原型?在头文件中。您可以在头文件中添加一条语句作为
#ifdef u cplusplus extern C{#endif
在定义任何原型之前,在开始处添加另一个作为
#ifdef(ifdef)cplusplus}{#endif
在结尾处。你为什么发布完全相同的问题?因为你没有给我答案?为什么你发布完全相同的问题?因为你没有给我答案?