Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 两个动态库,一个在C中,另一个在C++;,互相利用_C++_C_Shared Libraries - Fatal编程技术网

C++ 两个动态库,一个在C中,另一个在C++;,互相利用

C++ 两个动态库,一个在C中,另一个在C++;,互相利用,c++,c,shared-libraries,C++,C,Shared Libraries,海 我有一个动态的库加载器,它是用C++编写的,但是提供了一个C兼容的API。 该加载程序可以加载用任何编程语言编写的模块。它们排列在命名列表中,可以请求其他模块的函数指针。现在,用C++编写的一个用C编译器编译的模块得到了其他模块的指针,这些模块是用C++编写和编译的。 所以我的问题是:跨编译器的函数指针有效吗?我想我很久以前就听说过类似的东西。我使用64位Linux T.I.A./P> //我的C++代码… 外部“C”{ void此函数将从c()调用; } 无效,但不能(); 结构 {

我有一个动态的库加载器,它是用C++编写的,但是提供了一个C兼容的API。 该加载程序可以加载用任何编程语言编写的模块。它们排列在命名列表中,可以请求其他模块的函数指针。现在,用C++编写的一个用C编译器编译的模块得到了其他模块的指针,这些模块是用C++编写和编译的。 所以我的问题是:跨编译器的函数指针有效吗?我想我很久以前就听说过类似的东西。我使用64位Linux

T.I.A./P> <代码> //我的C++代码… 外部“C”{ void此函数将从c()调用; } 无效,但不能(); 结构 { 作废此文件绝对不会从C(std::map)中调用; }; C++代码应该声明带有

extern“C”
链接的接口可以从C调用

或者说你是指由不同编译器生成的C++代码?< /P> <代码> //我的C++代码… 外部“C”{ void此函数将从c()调用; } 无效,但不能(); 结构 { 作废此文件绝对不会从C(std::map)中调用; }; C++代码应该声明带有

extern“C”
链接的接口可以从C调用


或者是指不同编译器生成的C++代码?< /P> < P>指针在C和C++之间兼容。 唯一的限制是,在C++中使用时,必须使用外部“C”链接声明C函数:

extern "C"
{
     int foo();
}

函数指针在C和C++之间兼容。 唯一的限制是,在C++中使用时,必须使用外部“C”链接声明C函数:

extern "C"
{
     int foo();
}

啊,说得好。我当然使用GCC,但是这个项目有点奇怪,所以会有任何类型的编译器。这是一个单独的问题,但我如何标准化这类东西?只使用C或
extern“C”
公共接口,你就很好了。Irc x8664 64有一个定义良好的ABI,用于C++(),因此除非你的编译器之一被破解,它应该仍然是好的-我不能保证它。我当然使用GCC,但是这个项目有点奇怪,所以会有任何类型的编译器。这是一个单独的问题,但我如何标准化这类东西?只使用C或
extern“C”
公共接口,你就很好了。Irc x8664 64有一个定义良好的ABI,C++,(),所以除非你的编译器之一被破坏,它应该仍然是好的-我不能保证它。但是为什么。我只得到一个函数指针。链接时不会解析名称=Pfunction指针布局是ABI的一部分,通常在您的平台上是标准化的(除非您的设置很奇怪)。但为什么呢。我只得到一个函数指针。链接时不会解析名称=Pfunction指针布局是ABI的一部分,通常在您的平台上是标准化的(除非您的设置很奇怪)。