使用C 11 /最近的G 版本(4.7 / 4.6)的可移植性



我一直在使用G 4.6和G 4.7开发一个程序。我目前正在利用很多C 11个功能。

我做出了这个决定,认为我将能够将libs与子目录中的程序一起捆绑在一起,并使用ld_library_path。从那以后,我发现这导致我的程序进行了segfault。我可能应该早些时候对此进行了一些测试。它似乎是造成它的捆绑的libc.so.6(可能是其他的,但绝对是libc)。

过去,我使用过这种技术,它无法安装libs,并且效果很好,但是我永远不需要将libc和libstdc 与程序一起包含。

是否有解决此问题的方法,还是我必须回头回到较旧的C /libc/libstDC 版本?(以及随附的代码更改的噩梦)

我会避免依靠 LD_LIBRARY_PATH-将其用于测试或开发而不是生产部署。

而不是与'-Wl,-rpath,$ORIGIN'链接以创建包含$ORIGINDT_RPATH标签,这意味着动态链接器将在与可执行文件的同一dir中寻找共享libs(或e.g.使用'-wl,-rpath,-rpath,$ origin/../lib'查看../lib

如果程序的任何部分使用G 4.7构建,则需要使用libstdc 。因此,从运行时GCC 4.7。

但是,如果问题出现在libc.so.s.6这不是GCC问题,我的建议是不要尝试包装LIBC ...试图替换系统LIBC可能不是一个好主意。

我会说仅使用G 4.6或4.7,但不是两者。还...ldconfig将尝试使您的程序运行/lib或/usr/lib版本的libc..o,因此,如果您还有另一个,我不确定它将如何工作。因此,也许您应该只使用系统libc。

如果其他人有其他想法,也会发布它们。

最新更新