问题标签 [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 投票
2 回答
13739 浏览

macos - 如何在 mac os x 10.6 上安装 gnu ld?

我在我的 macbook pro(使用 mac os x 10.6)上编译其他出色的Contiki OS时遇到了很多麻烦。Contiki 实际上使用了 GCC、AR、LD 等许多 GNU 特定的特性和选项。所以我通过 macports 安装了这些实用程序,但看起来“port install binutils”没有安装 GNU ld,是吗?

所以,问题是,我如何在我的 mac 上获得 GNU ld ?有没有简单的替代方法(即wget, configure, make, make install方法)?

0 投票
1 回答
298 浏览

c - ld:链接器错误

ld: foo.o: 重定位 R_X86_64_PC32 反对未定义的符号 `bar' 在制作共享对象时不能使用;使用 -fPIC 重新编译

我用 -fPIC 重新编译,它仍然会产生这个错误。

0 投票
2 回答
356 浏览

shared - 共享库中的函数如何链接未实现的函数?

是否可以创建一个共享库,其中存在一些未实现的功能?

我想创建一个共享库 testDele.so 并将 testDele.so 中的一些功能留给其他人使用,例如:

  1. 库提供者制作文件:

====== testDele.c ===============

========== testDele.h ===============

  1. USER-B 实现文件

====== testDeleImp.c ===============

====== testDeleMain.c ==============

然后当我(共享库提供者)编译共享库时

发生以下错误

=================================================

我知道这个错误是由未实现的函数 priFunc 引起的。但是 gcc 是否有任何参数可以防止链接未定义的符号?

0 投票
2 回答
4382 浏览

c - 报错-"/usr/bin/ld: cannot find -levent"的原因及解决办法?

在编译使用 libevent 库的程序时,我使用 gcc 选项 -levent。但是我收到了这个错误-

/usr/bin/ld: 找不到 -levent

我的系统上没有 libevent,所以我在编译时静态链接到它

我该如何解决这个问题?

提前致谢!

0 投票
4 回答
9959 浏览

c - 符号 etext、edata 和 end 定义在哪里?

这是来自 Linux 手册页的代码:

运行时,下面的程序会产生如下输出:

在哪里etextedata end定义?这些符号是如何赋值的?是通过链接器还是其他方式?

0 投票
1 回答
4235 浏览

linux - 为什么 ld 不尊重 '-rpath-link' 选项?

我使用 strace 检测到这一点:


我很困惑; 根据手册 ld 首先必须尝试在-rpath-link路径中查找。

0 投票
3 回答
5303 浏览

linux - 共享库中库函数的选择性静态链接

我想创建一个使用第三方静态库中的函数的共享库。例如foobarlibfoobar.a. 我知道我的主要应用程序也在使用foo并将导出该符号。所以我只是想链接bar以节省代码大小并使'foo'未解决(因为它将由主应用程序提供)。如果我包含libfoobar.a,链接器ld将在我的共享库中包含这两个函数。如果我不包含libfoobar.a,我的库将无法访问函数bar,因为应用程序本身没有链接到bar. 问题:

  • 有没有办法告诉ld在构建共享库时只解析某些符号?
  • 变成libfoobar.a共享库?
  • 提取包含函数bar的文件libfoobar.a并在链接器行上指定它?
  • 不用担心,运行时加载器将从您的应用程序中使用,因此不会加载共享库中bar的副本?bar
0 投票
1 回答
578 浏览

xcode - Xcode 中的链接

如何正确制作 Xcode 链接目标文件?

包含“main”的文件和所有依赖项都可以正确编译(我可以很容易地在命令行中链接它们以生成可执行文件)。但是,Xcode 似乎拒绝这样做,导致“找不到符号”的 ld 错误。

这就是我当前的设置。检测到所有依赖项(计算器、输入等)并正确编译。cpp 文件包含 main 但无法链接到 .o 文件(由依赖项生成),导致出现几个 ld "symbol not found" 错误。

替代文字

有任何想法吗?

0 投票
1 回答
2759 浏览

python - mac上的python-config ldflags

python-config --ldflags我在 OS X 10.6.2 上遇到问题。

使用我的非系统 python.org python 安装:

但是,如果我使用上述 LDFLAGS 构建嵌入 Python 的 ac 程序,则会导致系统 python 被嵌入。似乎 -lpython2.5 在 -L 路径中的那个之前首先选择了系统 python。

到目前为止,我让它工作的唯一方法是

但是在分发方面,我真的很希望能够使用 python-config。

阻止它按预期工作的库搜索路径是怎么回事?根据手册页 -L 路径应该在默认路径之前搜索。

是否有任何选项可以添加到 python-config 输出以使其正常工作?

或者有什么方法可以从路径上的任何 Python 中提取工作框架标志(这将适用于用户正在使用的任何内容,即系统、python.org、macports 或自己构建的)?

0 投票
1 回答
1120 浏览

gcc - 关于 GCC 链接器的问题

道歉是因为我暂时没有环境自己去试验和整理以下问题:

1)假设我有四个库文件:libmylib_super.aand libmylib_super.so, mylib_dumb.aand mylib_dumb.so. 在指定要链接的库时,以下方法之间有什么区别:

A) -l:libmylib_super.a
B) -llibmylib_super
C) -lmylib_super
D)-lmylib_dumb

2)-static来自手册页的定义:

在支持动态链接的系统上,这会阻止与共享库的链接。在其他系统上,此选项无效。

这个链接器选项与问题 #1 有什么关系吗?或者……他们会不会互相干扰?

谢谢。

--- 2009-12-28 编辑 ---

通过链接到 Boost date_time 库,我刚刚建立了我的环境并进行了一些试验。假设我有三个库文件:libboost_date_time-mt-d.a, libboost_date_time-mt-d.so.1.41.0, libboost_date_time-mt-d.so -> libboost_date_time-mt-d.so.1.41.0(符号链接)。

A.1) -l:libboost_date_time-mt-d.a==> 链接OK,即使没有库文件,二进制也可以工作。
A.2)-l:libboost_date_time-mt-d.a带有-static==>链接错误 /usr/bin/ld: cannot find -lm

C.1) -lboost_date_time-mt-d==> 链接OK,二进制工作,但需要共享库文件。
C.2)-lboost_date_time-mt-d带有-static==>链接错误 /usr/bin/ld: cannot find -lm

关于 A.2 和 C.2 中的错误的任何想法?

此外,在 C.1 中运行程序时,它似乎在搜索名称为libboost_date_time-mt-d.so.1.41.0但不是libboost_date_time-mt-d.so. 如果程序在没有确切版本库的系统上运行,那会不会很不方便?使用共享库时处理版本的实用方法是什么?