【问题标题】:How can I keep a symbol during gcc strip?如何在 gcc 剥离期间保留符号?
【发布时间】:2020-06-22 19:18:09
【问题描述】:

使用 arm-linux-gnueabi-gcc,我正在处理一个对“main”有未定义引用的共享对象。我正在使用 dlopen() 打开这个库。但是,当我的程序使用“-Wl,-s”编译时,会删除符号 main,这会导致 dlopen() 失败并出现未定义的符号“main”。

在 gcc 中,有什么方法可以执行条带,但保留符号 main?

编辑:更好的是,我可以将符号“main”放在动态部分(类似于 -rdynamic)吗?

【问题讨论】:

    标签: gcc ld


    【解决方案1】:

    未定义对 main 的引用的共享对象似乎使用动态符号表来搜索对“main”的引用。所以,这里有两种选择:

    1. 用“-Wl,-rdynamic”编译。这会将所有符号放入动态符号表中。这行得通,但它也会导致在其中放置许多额外的符号。

    2. 使用“-Wl,--dynamic-list=[我的列表文件的路径]”编译。然后在动态文件中列出“main”以仅在动态符号表中保留 main。这样做的缺点是现在必须管理所有动态引用,但对于简单的程序来说,这就足够了。

    (2)的例子:

    调用:

     arm-linux-gnueabi-gcc -fPIC mycode.c -Wl,-s,--dynamic-list=./dynamic_symbols.txt
    

    dynamic_symbols.txt:

    { main; };
    

    【讨论】:

      猜你喜欢
      • 2011-08-30
      • 2015-01-06
      • 1970-01-01
      • 2012-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-23
      相关资源
      最近更新 更多