问题标签 [ld]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
14799 浏览

c - 如何在使用 GCC 编译的 C 文件中指定输出部分?

在汇编语言中,我使用 .section 指令告诉汇编器要输出到哪个部分,例如

有没有办法在 C 文件中做同样的事情。我希望某些文件的代码进入不同的部分,以便将其加载到不同的内存地址。我知道我可以为 ld 创建一个脚本并在那里指定部分,但我不想这样做。对于 C 文件,是否有一些编译器开关或 .section 指令之类的东西可以做到这一点?

0 投票
2 回答
3204 浏览

c++ - 使用 Codesourcery lite 工具链未托管的 LM3S8962 的 C++ 程序的链接器脚本?

有没有人有专门用于 Stellaris LM3S8962 板的链接器脚本,或者可以解释如何创建一个?我正在使用 codesourcery g++ lite 工具链,并且可以使用此链接器脚本成功地为托管环境创建 elf 文件:

这不适用于非托管库。我发现的所有示例都只适用于 C 而不是 C++,而且似乎涉及到一些关于 cs3 启动代码的魔法。任何帮助表示赞赏。

谢谢,迈克

0 投票
1 回答
256 浏览

c - 如何为我的使用第三方库的 C 程序建立成熟的构建过程(APR - Apache Portability Runtime)

我编写了一个由许多文件组成的 C 程序,并使用 APR (http://apr.apache.org) - 它包括它的标题,我更喜欢它的库的动态链接。

我的问题是,目前我对在我的开发站点设置的 APR 标头的路径和我找到的静态 APR 库的路径都进行了硬编码。

这就是我的 Makefile 的样子(我重命名了一些位):

显然 APR 静态库文件的名称是libapr-1.a,但我也有,而且我libapr-1.solibapr-1.so.0libapr-1.la不知道是什么。所以,实际上,我怀疑我现在正在静态链接到 APR。除了建立一个受人尊敬的构建系统的目标之外,我还想动态链接到 APR。

我是否有一种常见的做法来设置一个自动化构建,它不仅适用于我现在,而且足够灵活,可以让其他人构建我的程序?我闻到了 的接近autotools,但我对他们的经验绝对为零,并且现在想满足于下一个最好的事情。我有什么选择?

0 投票
2 回答
7098 浏览

c++ - 如何确定库间依赖关系?

我的项目由几个静态库组成,它们在最后一步中链接在一起。现在我遇到了问题,库的链接顺序很重要(否则我会收到未定义的符号链接器错误)。有时我会遇到问题,我必须重新排序链接库(-lcommon -lsetup -lcontrol 等)。目前这是一个愚蠢的试验和错误:重新排序、编译、检查错误、重新排序、编译等等。

因此,我编写了一个小程序来向我展示库间依赖关系并生成要链接的库的顺序。它从nm中读取已定义的('T'、'B' 等)和未定义的符号('U')并从'未定义的符号列表'。现在它为每个未定义的符号确定解析它的库。

但是我的程序向我展示了循环依赖......我的错误是什么?

如果它们真的存在,我根本无法链接......那么在分析 nm 输出时我错过了什么?还是分析 nm 输出不是获取这些依赖项的方法?

0 投票
1 回答
2529 浏览

shared-libraries - 使用 binutils 创建可重定位共享库

我有一个生成可重定位共享库的自定义工具链。这与一个同样定制的 ELF 加载器一起工作,它将这些加载到内存中,修复它们。我现在正试图说服 gcc 和 binutils 生成与此加载程序兼容的 ELF 文件。

不幸的是,binutils 似乎拒绝生成可重定位的共享对象。它会生成 PIC 共享对象,但我不想这样做,因为 GOT/PLT 的额外开销(此外,自定义 ELF 加载器不支持它)。它会生成可重定位的对象,但它们不是动态对象,因此没有 ELF 加载器希望能够加载它们的适当部分。

我不清楚为什么 GNU ld 拒绝允许我在同一命令行上指定 --relocatable 和 -shared 。任何人都可以启发我吗?有没有人知道让 ld 生成我正在寻找的目标文件的咒语?

0 投票
1 回答
1790 浏览

ruby-on-rails - 无法安装 autotest-fsevent 或 rs-fsevent;出现 ld 错误但已安装 xcode

这是我得到的:

$ sudo gem install autotest-fsevent 密码:构建原生扩展。这可能需要一段时间... 错误:安装 autotest-fsevent 时出错:错误:无法构建 gem 原生扩展。

/Volumes/SSD/Users/Ross/.rvm/rubies/ruby-1.9.2-p136/bin/ruby extconf.rb ld:无法打开输出文件进行写入:/Volumes/Macintosh HD/Users/Ross/。 rvm/rubies/ruby-1.9.2-p136/lib/ruby/gems/1.9.1/gems/autotest-fsevent-0.2.4/bin/fsevent_sleep,errno=2 collect2:ld返回1退出状态extconf.rb: 30:in `': fsevent_sleep 的编译失败(参见 README)(RuntimeError)

自述文件是这样说的:

故障排除:

fsevent_sleep 编译失败

确保您已安装 Xcode(Mac OS X 开发套件)。

我已经安装了最新的 xcode,甚至重新安装了它,以防万一丢失了什么。

任何人都知道如何至少进一步解决这个问题。我确实听到有人说它可能与路径有关。但这里是关于路径的信息。我的机器上有两个驱动器,一个带有操作系统的 SSD 和一个带有我所有数据的 HDD。我的主目录的 SSD 上有一个符号链接,所以/Volumes/SSD/Users/Ross/指向/Volumes/Macintosh HD/Users/Ross 这是问题吗?卷名中的空格可能是一个问题吗?我怎么能解决这个问题?

0 投票
1 回答
138 浏览

iphone - 我删除了 libisimulate 但如果我编译我会收到警告。怎么了?

所以我安装了这个: http: //www.vimov.com/isimulate/然后我删除了它,因为我不再需要它了。但是现在我每次编译时都会收到这个警告:

ld: 警告: 目录 '/Users//../../Downloads/libisimulate-4.x-1.5-20100925-opengl' 以下 -L 未找到

我都删了。我用取景器搜索了任何包含“isim”的东西,但没有找到任何东西。怎么了?

编辑:它说的是Project <App name> Configuration Debug

0 投票
2 回答
1358 浏览

c++ - LD_PRELOAD 帮助

我正在尝试使用 LD_PRELOAD。

原版.cpp

黑客攻击.cpp

我编译 original.cpp:

和 hacked.cpp:

我尝试:

应该看到字符串“Hello hacked myPuts”,由“Hello myPuts”出现。(如果我尝试“覆盖” puts 函数,它可以正常工作)

我错过了什么?

0 投票
1 回答
840 浏览

iphone - Duplicate Symbol Linker error XCode 3.2.5 -- 链接器似乎以不同的方式引用同一个文件

我收到以下错误:

ld:在 /Users/macuser/Dropbox/DFJ/three20/Build/Products/Debug-iphoneos/libThree20Core.a(TTGlobalCore.o) 和 ../three20/Build/Products/Debug-iphoneos/libThree20Core.a 中重复符号 _TTCreateNonRetainingArray (TTGlobalCore.o)collect2:ld返回1退出状态命令/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/g++-4.2失败,退出代码1

它似乎是从绝对路径和相对路径引用相同的 .o 。

ld build/DFJ.build/Debug-iphoneos/DFJ.build/Objects-normal/armv6/DFJ normal armv6 cd /Users/macuser/Dropbox/DFJ/DFJ setenv IPHONEOS_DEPLOYMENT_TARGET 3.2 setenv PATH "/Developer/Platforms/iPhoneOS.platform/开发者/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin" /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/g++-4.2 -arch armv6 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.2.sdk -L/Users/macuser/Dropbox/DFJ/DFJ/build/Debug-iphoneos -F/Users/macuser/Dropbox/DFJ/DFJ /build/Debug-iphoneos -F/Users/macuser/Dropbox/DFJ/DFJ/../../../Downloads/gdata-objectivec-client-1.11.0/Source/build/Debug -filelist /Users/ macuser/Dropbox/DFJ/DFJ/build/DFJ.build/Debug-iphoneos/DFJ.build/Objects-normal/armv6/DFJ.LinkFileList -dead_strip -force_load ../three20/Build/Products/Debug-iphoneos/libThree20Core.a -force_load ../three20/Build/Products/Debug-iphoneos/libThree20UICommon.a -force_load ../three20/Build/Products/Debug-iphoneos/libThree20Launcher.a -force_load ../three20/Build/Products/Debug-iphoneos/libThree20UINavigator.a -force_load ../three20/Build/Products/Debug-iphoneos/libThree20.a -force_load ../three20/Build/Products/Debug-iphoneos /libThree20UI.a -force_load ../three20/Build/Products/Debug-iphoneos/libThree20Network.a -force_load ../three20/Build/Products/Debug-iphoneos/libThree20Style.a -all_load -miphoneos-version-min=3.2 /Users/macuser/Dropbox/DFJ/three20/Build/Products/Debug-iphoneos/libThree20Core.a /Users/macuser/Dropbox/DFJ/three20/Build/Products/Debug-iphoneos/libThree20UICommon。a /Users/macuser/Dropbox/DFJ/three20/Build/Products/Debug-iphoneos/libThree20Launcher.a /Users/macuser/Dropbox/DFJ/three20/Build/Products/Debug-iphoneos/libThree20UINavigator.a /Users/macuser/ Dropbox/DFJ/three20/Build/Products/Debug-iphoneos/libThree20.a /Users/macuser/Dropbox/DFJ/three20/Build/Products/Debug-iphoneos/libThree20UI.a /Users/macuser/Dropbox/DFJ/three20/ Build/Products/Debug-iphoneos/libThree20Network.a /Users/macuser/Dropbox/DFJ/three20/Build/Products/Debug-iphoneos/libThree20Style.a -framework QuartzCore -framework Foundation -framework UIKit -framework CoreGraphics -lsqlite3.0 -框架 MobileCoreServices -lxml2 -framework Security -framework SystemConfiguration -framework OpenAL -framework CoreAudio -framework AudioToolbox -o /Users/macuser/Dropbox/DFJ/DFJ/build/DFJ.build/Debug-iphoneos/DFJ。构建/对象-正常/armv6/DFJ

ld:在 /Users/macuser/Dropbox/DFJ/three20/Build/Products/Debug-iphoneos/libThree20Core.a(TTGlobalCore.o) 和 ../three20/Build/Products/Debug-iphoneos/libThree20Core.a 中重复符号 _TTCreateNonRetainingArray (TTGlobalCore.o)collect2:ld返回1退出状态命令/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/g++-4.2失败,退出代码1

0 投票
1 回答
10999 浏览

c++ - /usr/bin/ld:警告:abc.so,未找到 xyz.so 所需(尝试使用 -rpath 或 -rpath-link)”

我正在构建一个 C++ 应用程序,使用 Netbeans 6.9 作为我的 IDE。我有一个 C++ 库,它是一个纯 C 库的包装器。

我已将文件正确添加到项目中(使用添加库文件选项)。这是 g++ 和链接器产生的输出:

我在 C++ 包装库上运行 ldd 并得到以下输出:

因此,尽管该文件存在于我的机器上,但它似乎不在我的库缓存中。我尝试使用 ldconfig,但问题仍然存在。关于如何解决这个问题的任何想法?