问题标签 [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.
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
方法)?
c - ld:链接器错误
ld: foo.o: 重定位 R_X86_64_PC32 反对未定义的符号 `bar' 在制作共享对象时不能使用;使用 -fPIC 重新编译
我用 -fPIC 重新编译,它仍然会产生这个错误。
shared - 共享库中的函数如何链接未实现的函数?
是否可以创建一个共享库,其中存在一些未实现的功能?
我想创建一个共享库 testDele.so 并将 testDele.so 中的一些功能留给其他人使用,例如:
- 库提供者制作文件:
====== testDele.c ===============
========== testDele.h ===============
- USER-B 实现文件
====== testDeleImp.c ===============
====== testDeleMain.c ==============
然后当我(共享库提供者)编译共享库时
发生以下错误
=================================================
我知道这个错误是由未实现的函数 priFunc 引起的。但是 gcc 是否有任何参数可以防止链接未定义的符号?
c - 报错-"/usr/bin/ld: cannot find -levent"的原因及解决办法?
在编译使用 libevent 库的程序时,我使用 gcc 选项 -levent。但是我收到了这个错误-
/usr/bin/ld: 找不到 -levent
我的系统上没有 libevent,所以我在编译时静态链接到它
我该如何解决这个问题?
提前致谢!
c - 符号 etext、edata 和 end 定义在哪里?
这是来自 Linux 手册页的代码:
运行时,下面的程序会产生如下输出:
在哪里etext
,edata
end
定义?这些符号是如何赋值的?是通过链接器还是其他方式?
linux - 为什么 ld 不尊重 '-rpath-link' 选项?
我使用 strace 检测到这一点:
我很困惑; 根据手册 ld 首先必须尝试在-rpath-link
路径中查找。
linux - 共享库中库函数的选择性静态链接
我想创建一个使用第三方静态库中的函数的共享库。例如foo
,bar
从libfoobar.a
. 我知道我的主要应用程序也在使用foo
并将导出该符号。所以我只是想链接bar
以节省代码大小并使'foo'未解决(因为它将由主应用程序提供)。如果我包含libfoobar.a
,链接器ld将在我的共享库中包含这两个函数。如果我不包含libfoobar.a
,我的库将无法访问函数bar
,因为应用程序本身没有链接到bar
. 问题:
- 有没有办法告诉ld在构建共享库时只解析某些符号?
- 变成
libfoobar.a
共享库? - 提取包含函数
bar
的文件libfoobar.a
并在链接器行上指定它? - 不用担心,运行时加载器将从您的应用程序中使用,因此不会加载共享库中
bar
的副本?bar
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 或自己构建的)?
gcc - 关于 GCC 链接器的问题
道歉是因为我暂时没有环境自己去试验和整理以下问题:
1)假设我有四个库文件:libmylib_super.a
and libmylib_super.so
, mylib_dumb.a
and 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
. 如果程序在没有确切版本库的系统上运行,那会不会很不方便?使用共享库时处理版本的实用方法是什么?