小编yug*_*ugr的帖子

当我运行解释性语言二进制文件及其脚本时,如何检查链接了哪些共享库?

我试图找到运行需要火炬库的 lua 脚本实际需要的每个库

测试.lua

#!/usr/bin/env lua

print "Welcome to LUA"
print('_VERSION = ' .. _VERSION)
require("nn") -- this loads torch nn libraries to be further used in the code
print "Load pass"
Run Code Online (Sandbox Code Playgroud)

输出

Welcome to LUA
_VERSION = Lua 5.1
Load pass
Run Code Online (Sandbox Code Playgroud)

当我使用

lld ./lua
# or
lld ./lua test.lua
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

ldd ./lua ../../../bin/test.lua
    linux-vdso.so.1 =>  (0x00007ffdba77d000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f160dd3e000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f160db3a000)
    libreadline.so.6 => /lib/x86_64-linux-gnu/libreadline.so.6 (0x00007f160d8f3000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f160d52a000)
    /lib64/ld-linux-x86-64.so.2 (0x00005580e2ebd000)
    libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 …
Run Code Online (Sandbox Code Playgroud)

python lua interpreted-language shared-libraries libraries

2
推荐指数
1
解决办法
1381
查看次数

Fortran共享库中的符号命名,intel vs gcc?

有没有办法控制共享库中符号的命名?具体来说,我一直在使用GCC进行一个项目,我们通过Python中的C-Types访问共享库.这很好用,但是最近我一直在使用建议使用英特尔编译器的系统.我可以很好地构建共享对象,但我发现与intel相比,这些符号的命名约定略有不同.特别是当我使用gcc编译时,符号名称如下所示:

__test_function_MOD_read_a_file
Run Code Online (Sandbox Code Playgroud)

英特尔编译的共享对象具有如下符号名称:

test_function_mp_read_a_file__
Run Code Online (Sandbox Code Playgroud)

有没有办法强制命名的一致性或至少在事后改变符号的名称?

例如,考虑以下代码test_function.f90

MODULE test_function
   CONTAINS
   SUBROUTINE read_a_file
      PRINT *,'I did a thing!'
   END SUBROUTINE
END
Run Code Online (Sandbox Code Playgroud)

编译行看起来应该是这样的

gfortran -fPIC -c test_function.f90
gfortran -shared -o libtest_function.so test_function.o
Run Code Online (Sandbox Code Playgroud)

fortran shared-libraries gfortran

2
推荐指数
1
解决办法
251
查看次数

出现 GCC 错误:“sys/memfd.h:没有这样的文件或目录”

我正在尝试在我的 C 代码中使用memfd_create系统调用。我试图包含sys/memfd.h,因为手册页memfd_create说是适当的,但是 GCC 给了我一个错误“sys/memfd:没有这样的文件或目录”。

我尝试过谷歌搜索,但找不到有同样问题的人。我注意到某些版本的联机帮助页memfd_create说我应该包含sys/mman.h,但当我尝试它时它似乎没有帮助。它会说memfd_create是隐式声明的。

这是我的问题的最小再现。

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>

#include <sys/mman.h>

#include <sys/memfd.h>



int main(){

        int fd;
        fd = memfd_create("test", MFD_CLOEXEC);

        return 0;
}
Run Code Online (Sandbox Code Playgroud)

我希望上面的代码能够编译并运行而不会出现错误。

c linux ubuntu system-calls include

2
推荐指数
1
解决办法
5323
查看次数

重新定义共享库中的符号

我需要更改共享库 (.so) 文件中的某些符号,如下例所示:我需要将abc.so 文件中的符号重命名为 symbol xyz。我有一个工具可以在头文件中替换它,我面临的唯一挑战是更改我的 .so 共享库。对于共享库,是否有任何工具或命令可以帮助我反汇编 .so 文件、更新符号并再次重新组装为 .so 文件?对于共享库,我们需要一种重建符号表的机制。如果有任何工具可以完成我的任务,需要帮助吗?

仅供参考:更改源是最好的方法,但对于短期的解决方案来说,它可以帮助在符号级别替换代码字。

shared-libraries binutils objcopy readelf

1
推荐指数
1
解决办法
1693
查看次数

加密编译错误,可能与使用"虚拟"有关吗?

我收到此编译器错误.我有几百行代码,所以我会发布一些我认为可能相关的代码,但你需要告诉我你想看到的内容.

这是我在编译时得到的错误:

/tmp/ccBE5kZ5.o:game.cpp:(.text+0x1067): undefined reference to `vtable for Person'
/tmp/ccBE5kZ5.o:game.cpp:(.text+0x17a5): undefined reference to `vtable for Person'
/tmp/ccBE5kZ5.o:game.cpp:(.text+0x1ee6): undefined reference to `vtable for Person'
/tmp/ccBE5kZ5.o:game.cpp:(.text+0x2560): undefined reference to `vtable for Person'
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../i686-pc-cygwin/bin/ld: /tmp/ccBE5kZ5.o: bad reloc address 0xc in section `.text$_ZN6WeaponD1Ev[Weapon::~Weapon()]'
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../i686-pc-cygwin/bin/ld: final link failed: Invalid operation
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

这是我的Person班级和我的Weapon班级的宣言,而Actor班级Person是以下的后代:

class Actor {
public:
virtual void act();
virtual string getName();
virtual void setName(string n);
Actor();
Actor(string n);
virtual ~Actor();
private: …
Run Code Online (Sandbox Code Playgroud)

c++ virtual gcc undefined

0
推荐指数
1
解决办法
1754
查看次数

为什么在gcc中需要-rdynamic选项?

默认情况下,所有符号都导出到动态表,那么为什么要使用-rdynamic标志?即使我们通过attribute /隐藏某些符号-fvisibility=hidden- -rdynamic不会更改结果,也不会取消隐藏先前隐藏的符号。那有什么意义呢?

gcc symbols shared-libraries elf dynamic-linking

0
推荐指数
1
解决办法
940
查看次数