草庐IT

SO_TIMEOUT

全部标签

linux - 如何修复 Linux 项目中的共享库 (.so) 之一?

我想快速修复项目的一个.so库。重新编译.so并替换原来的是否安全?或者我必须重建并重新安装整个项目?还是视情况而定? 最佳答案 这取决于。共享库需要是binary-compatible与您的可执行文件。例如,如果您更改了某个库的内部函数的行为,您可能不需要重新编译。如果您更改了应用程序已知的结构的大小(例如,通过添加成员),您将需要重新编译,否则库和应用程序会认为该结构小于实际大小,并会在以下情况时崩溃库尝试读取应用程序未写入的额外未初始化成员。如果您更改应用程序可见的任何函数的参数类型或位置,您确实需要重新编译,因为库会尝试从堆

c - 从内存中加载 .so 文件

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:dlopenfrommemory?我在Windows的DLL文件中看到过这个,从内存缓冲区加载,但我在Linux的任何地方都找不到它,“ld”源代码是我见过的最复杂的代码。所以:有没有从内存中加载.so文件的例子?即使是我能完成的简单的?我只是不知道从哪里开始,尽管我已经阅读了大部分ELF规范,但它对我来说仍然很神秘。

linux - 如何在 Mac OS X 中打开 Linux `.so` 文件

我的Linux.so文件可以在Ubuntu中使用fopen()命令打开,但是当我尝试使用fopen()打开文件时命令在MacOSX10.6中失败。错误是无法识别文件类型。如何在不重新编译的情况下使Linux库或工具在MacOSX10.6上运行? 最佳答案 Linux二进制文件与MacOSX二进制文件完全不同,即使是在相同的架构上。对于初学者,Linux二进制文件使用ELF格式,而MacOSX格式基于Mach-O格式。但即使格式相同,操作系统界面也不相同。因此,MacOSX无法直接运行Linux二进制文件。最安全的方法是在虚拟机中安装

linux - 红语控制台错误: libreadline. so.6:无法打开共享对象文件

我是Red编程语言的新手。我尝试通过下载Linux二进制文件来测试它。但是当我在控制台上执行它时,我收到一条错误消息:root@xxx-linux:/home/xxx/Downloads#./red-042Pre-compilingRedconsole.../tmp/red/console:errorwhileloadingsharedlibraries:libreadline.so.6:cannotopensharedobjectfile:Nosuchfileordirectory我在Google上搜索此错误,但找不到任何内容。我的操作系统是64位LinuxUbuntu14.04LT

c++ - 通过 g++ 编译将 .so 文件链接到 .cpp 文件

我正在尝试让一个库在我的c++项目中工作,但对于不习惯c++的人,没有关于如何做到这一点的明确说明以下link是离我最近的地方内容如下-L/path/to/my/library/folder-ldllname还有以下thread陈述如下gccyourfile.cpp-lblah现在我可以看到命令是-l+filename,例如我的文件名是directory/libtest.so它会是-ldirectory/libtest.so,这是正确的吗,有人可以澄清我目前正在使用以下命令编译我的maincpp.cpp文件,但我想包含一个名为./directory/libtest.so的.so文件g+

linux - 错误 : ld. 所以:无法预加载来自 LD_PRELOAD 的对象 'libgtk3-nocsd.so.0'

在Ubuntu18.04上使用Hugo和AWSCLI时遇到此问题。ERROR:ld.so:object'libgtk3-nocsd.so.0'fromLD_PRELOADcannotbepreloaded(failedtomapsegmentfromsharedobject):ignored.这是Ubuntu18.04、Hugo和AWSCLI的全新安装。 最佳答案 在此处进行一些网络搜索后找到了答案:https://github.com/PX4/Firmware/issues/9409解决方案如果您使用以下行更新您的.bashrc,

c - 当进程 fork 时,共享库 .so 是否仍在地址空间中?构造函数会再次执行吗?

当进程fork时,子进程的地址空间中是否会有自定义的共享库(.so文件)?如果是这样,共享库的地址与其父进程的地址相同还是不同(由于ASLR)?在主函数__attribute__((constructor))构造函数之前运行的函数是否会在所有子进程中再次执行?线程呢? 最佳答案 是的,child会保留parent的映射。通常,Linux的虚拟内存系统实际上会在两个进程之间共享页面,直到其中一个尝试写入新数据为止。届时,将制作一个副本,每个进程将拥有自己唯一的版本-在不同的物理地址但保留相同的虚拟地址。这被称为“写时复制”,与不支持此

python - ImportError : libcudart. so.7.0: 无法打开共享对象文件: 没有那个文件或目录

[xx_xx@xxxx~]$pythonmultiply.pyTraceback(mostrecentcalllast):File"multiply.py",line2,inimporttensorflowastfFile"/home/luohao/.usr/bin/python2.7.10/lib/python2.7/site-packages/tensorflow/__init__.py",line4,infromtensorflow.pythonimport*File"/home/luohao/.usr/bin/python2.7.10/lib/python2.7/site-pa

linux - Fedora 28/GLIBC 2.27 libm.so.6 logf() 和 powf() c++

我相信其他Fedora28用户会知道,该操作系统的glibc最近已更新为glibc2.27。在许多其他方面,2.27添加了logf()和powf()的新实现。这导致我的应用程序无法在具有较旧glibc的发行版(例如Debian)上运行。在Debian上调用应用程序时,会产生以下错误:...libm.so.6版本GLIBC-2.27未找到(./app_name需要)我使用以下过程将符号追踪到logf和powf:objdump-T./app_name|grepGLIBC_2.27给出了以下输出:0000000000000000DF*UND*0000000000000000GLIBC_2.2

linux -/usr/lib64/libc.so是怎么生成的?

[root@xxtest]#cat/usr/lib64/libc.so/*GNUldscriptUsethesharedlibrary,butsomefunctionsareonlyinthestaticlibrary,sotrythatsecondarily.*/OUTPUT_FORMAT(elf64-x86-64)GROUP(/lib64/libc.so.6/usr/lib64/libc_nonshared.aAS_NEEDED(/lib64/ld-linux-x86-64.so.2))有人知道这种东西是怎么产生的吗? 最佳答案