Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.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++;异常,并且可以在较旧的平台上运行? 如何在一个Linux Linux X64(例如红帽7?x)平台上创建一个C++ C++共享库,它可以在一个Linux平台上创建(例如,Reskat?.x)平台,它可以在其他平台上运行,它与共享库兼容(例如,Red Hat 5。x或Red Hat 8。x)?< /P> 不使用C++标准库(除了),但内部使用C++异常。它的外部API仅为C,所有异常都在内部捕获(包括为了安全起见使用“catch(…)”_C++_Linux_Exception_Shared_Platform - Fatal编程技术网

如何在内部使用C++;异常,并且可以在较旧的平台上运行? 如何在一个Linux Linux X64(例如红帽7?x)平台上创建一个C++ C++共享库,它可以在一个Linux平台上创建(例如,Reskat?.x)平台,它可以在其他平台上运行,它与共享库兼容(例如,Red Hat 5。x或Red Hat 8。x)?< /P> 不使用C++标准库(除了),但内部使用C++异常。它的外部API仅为C,所有异常都在内部捕获(包括为了安全起见使用“catch(…)”

如何在内部使用C++;异常,并且可以在较旧的平台上运行? 如何在一个Linux Linux X64(例如红帽7?x)平台上创建一个C++ C++共享库,它可以在一个Linux平台上创建(例如,Reskat?.x)平台,它可以在其他平台上运行,它与共享库兼容(例如,Red Hat 5。x或Red Hat 8。x)?< /P> 不使用C++标准库(除了),但内部使用C++异常。它的外部API仅为C,所有异常都在内部捕获(包括为了安全起见使用“catch(…)”,c++,linux,exception,shared,platform,C++,Linux,Exception,Shared,Platform,现在的经验是,尽管GLIBC a.so使用GCC 4.7.2构建并由主程序通过dlopen加载,但它确实在具有2.12版libc.so.6等的系统上运行,但在具有2.5版的系统上不运行,在抛出异常时会发生奇怪的abort()和terminate()调用 .so是用“-fabi version=2”编译的。在任何平台上都不会发生链接器/加载程序错误 因此,我的问题是如何实现构建这样一个平台的任务。那么,哪个平台可以在较旧的平台上运行呢?这必须是可能的。在Linux上g++链接到您的可执行文件和共享

现在的经验是,尽管GLIBC a.so使用GCC 4.7.2构建并由主程序通过dlopen加载,但它确实在具有2.12版libc.so.6等的系统上运行,但在具有2.5版的系统上不运行,在抛出异常时会发生奇怪的abort()和terminate()调用

.so是用“-fabi version=2”编译的。在任何平台上都不会发生链接器/加载程序错误


因此,我的问题是如何实现构建这样一个平台的任务。那么,哪个平台可以在较旧的平台上运行呢?这必须是可能的。

在Linux上
g++
链接到您的可执行文件和共享库的
libstdc++
libgcc_


我会尝试使用
-static libgcc
-static libstdc++
将这些静态链接到您的共享库中。然后将检查
ldd my.so
输出,以确保您的共享库没有链接不需要的
。so

我对不得不处理LINUX/UNIX表示哀悼。我也在遭受同样的命运。避免使用Linux/UNIX。使用一个系统(我不会告诉你它的名字),它能够(从20年前开始)在一个进程中处理多个不同的运行时库,并且不会遇到std::总是以弱符号结束的问题(即使是std::vector,也不能从std名称空间隐藏符号)。