问题标签 [linker-flags]
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.
linker - 我想知道当我使用命令“g++ -o main main.o -L”时发生了什么-l"
假设我在当前目录中有main.c main.o libheymath.so 。我想将它们链接在一起以生成一个可执行文件。我使用命令“g++ -o main main.o -L./ -lheymath”来实现这一点。但是不知道为什么要注明库目录和名称。据我所知,当我运行“./main”时,系统会将共享库加载到特定目录(例如/lib和/use/lib以及 LD_LIBRARY_PATH 等中指定的目录)的内存中,但不是我所指出的。那么“-L./ -lheymath”的目的是什么?
工作目录文件:
main.c、main.o、libheymath.so
命令:
g++ -o main main.o -L./ -lheymath
。/主要的
gcc - MSVC '/SECTION:.data,EWR' 与 GCC 等效的链接器选项
我想在编译时将 EWR(Execute/Write/Read) 内存属性添加到 .data 部分。
MSVC 编译器只需添加“/SECTION:.data,EWR”链接器选项即可完成此操作。
但我不知道如何在 GCC 编译器(MinGW)中做到这一点。
请帮忙!
xamarin.ios - 添加链接器标志将导致构建失败
我在我的 Xamarin iOS 项目中使用了两个第三方框架,一个 Swift 和一个 Objective C。我被要求为这些框架添加以下链接器标志。
添加这些标志后,我会收到构建错误
MTOUCH:错误 MT5216:本机链接失败
我的问题是,
- 那些 Linker Flags 的含义是什么?
- 有没有地方可以找到链接器标志及其描述?
- 我如何知道第三方框架需要哪些链接器标志?
cmake - 自动将链接选项添加到共享库的依赖项
假设我有一个共享库,A
和其他链接它的东西,B
. 他们在两个独立的项目中。
在我当前的设置中,为了A
能够正常工作的功能,B
需要添加-rdynamic
到其链接器选项中,如下所示:
问题是 可能有很多很多的依赖项A
,因此必须为它们中的每一个显式包含上面的行是一件麻烦事。
有没有办法A
让它所有的家属自动使用-rdynamic
?
编辑:这里是我的情况的更详细的解释。
我有一个共享库,mylib
. 它不能是静态库。它在同名的 CMake 项目中定义。
它CMakeLists.txt
看起来像这样:
在单独的项目中,有可执行文件 ,client_i
使用/链接到mylib
,有时是间接的(即链接到链接到的东西mylib
)。
其中之一CMakeLists.txt
看起来像:
注意-rdynamic
. 如果没有此选项,则由 提供的某些功能mylib
不起作用。我需要它。
我的问题是可能有成千上万个不同client_i
的 s,每个都由我提供的不同人/用户在自己的项目中定义mylib
(并且可以用作二进制文件)。
我想避免必须添加-rdynamic
到每个client_i
s,因为有些用户可能不知道它(因为它可能被间接使用),有些人可能会忘记它,它可能会导致头痛等。
理想情况下,CMakeLists.txt
formylib
看起来像:
aclient_i
CMakeLists.txt
只是:
它会-rdynamic
在它的链接器选项中。但是我已经尝试过了,它似乎不起作用。
c++ - CMake 也将所有 gcc 标志传递给 nvcc
我的项目使用 cuda 内核作为一个小模块,需要 nvcc 进行编译。在编译期间,cmake 还将用于 gcc 的相同链接器和编译器标志传递给 nvcc。在我的特殊情况下,我收到以下错误。
按照该线程中接受的答案,我设法删除了需要 nvcc 的目标的编译器标志,如下所示。
使用它,我避免了由于错误的编译器标志而导致的错误,如下所示:
但是我不能使用相同的过程来删除链接器标志,因为get_target_property
只获取编译器标志而不是链接器标志。
我正在寻找一种解决方案,仅针对一个目标编译禁用链接器标志。
预期的 cmake 最低版本是VERSION 3.0
c - 预处理器是否可以检查是否使用了链接器选项?
我有一个计时器程序,它使用clock_gettime
. 这需要-lpthread
选项才能成功编译,否则会undefined reference to 'clock_gettime'
出错。
到目前为止,我探索了我们可以生成预处理器警告消息#warning
并检查包含是否存在#if __has_include("<pthread.h>")
。但是检查这些并不能真正检查是否clock_gettime
定义了函数。
只是好奇我是否可以制作一条自定义消息,以在编译时或预处理时警告那些在没有它的情况下编译以包含-lpthread
选项的人。
我在 Windows 上使用 MinGW。
linker - 为什么我不能在公共输出部分中对来自 --emit-relocs ld 选项的输入部分进行分组?
我必须在运行时重定位一个精灵,所以我想访问链接器发出的所有重定位:因此使用--emit-relocs
ld 选项。问题是我想将所有.rela.*
部分分组到链接描述文件中的一个.rela.dyn
部分,然后通过这个唯一的部分来重新定位所有符号。
但是我无法让我的链接器脚本来实现这一点,我仍然.rela.*
在最终的精灵中看到很多部分,而不是输出部分.rela.dyn
。以下是我在链接器脚本中使用的内容,实际上只是从另一个有效但不使用的体系结构链接器脚本复制而来--emit-relocs
:
选项是否--emit-relocs
“绕过”链接描述文件?还是我只是错过了什么?
谢谢,
亚历克斯
winapi - 如何使用 GCC 操作 PE 特性
像 MSVC 一样,我想像High Entropy VA, Dynamic Base, etc.
gcc 一样设置 PE 特性。我怎么能用 gcc 做到这一点?目前,gcc 只设置了特性Executable
。
cuda - 我可以让 nvlink 列出它实际使用的库吗?
nvlink
可以通过-L <path>
选项为库提供搜索路径,以及要考虑的一堆库-lmylib1
-lmiylib2
等。
可以nvlink
列出它在链接期间实际使用的库(完整路径)吗?