ld相关内容
可以将--export-dynamic传递给ld,这将导出程序中的符号(以便它们可用于运行时加载的任何共享库): $ cat > test.c void foo() {} int main() { foo(); } ^D $ gcc test.c $ nm -D a.out | grep foo ...没什么。现在: $ gcc -Wl,--export-dynamic te
..
这是一些集合。使用Windows clang,我可以编写clang -c my.s并获得目标文件。我可以使用 链接它 &Q;C:程序文件(X86)Microsoft Visual Studio2019BuildToolsVCToolsMSVC14.29.30133inHostx64x64link.exe";n.o/Entry:Main (库路径为c:/Program Fil
..
我正在努力学习(或至少理解)Windows上的汇编。我在某个地方找到了这个Hello World示例,我想用它创建一个.exe文件,以确保所有内容都设置正确。 对于将发布其他Hello World示例的人,我想明确表示,我正在寻找具有直接Windows API调用的示例。 global _start extern _ExitProcess@4
..
我正在尝试针对特定位置(/home/user/cuda_sync_analyzer-install/lib/libInsertTimingInstr.so)的共享库编译C文件,但ld似乎找不到它- $ gcc -g -I/home/user/tools/cuda_sync_analyzer/src/InsertTimingInstr -L/home/user/cuda_s
..
我已下载tbb并将其放置在我的存储库目录中: > tree deps/tbb/ -d deps/tbb/ ├── bin ├── cmake │ └── templates ├── include │ ├── serial │ │ └── tbb │ └── tbb │ ├── compat │ ├── internal │ └──
..
我正在使用基于GCC的工具链的嵌入式处理器上开发一个C应用程序。在我的应用程序中,我需要在特定的内存位置放置一个标志。我需要有关链接器命令文件语法的帮助才能完成此操作。 推荐答案 在C文件中编写类似以下内容: static int flag __attribute__ ((section (".flag"))) __attribute__ ((__used__)) = 6;
..
例如,如果我有两个文件foo.c和bar.o,并且foo.c包含引用bar.o中的函数bar()的函数foo(): int foo(int x) { x = bar(x); /* ... */ } 如何编译公开foo()但不公开bar()的静态或动态库?换句话说,我希望bar()仅在库内链接。 推荐答案 使用标准C时,您只能导出函数或不导出,没有“仅导出到这些文件”选项。因此
..
背景 我帮助维护了一个简单的命令行工具diskmanager,用于监视糟糕的磁盘性能,这主要是由于同时使用同一磁盘的操作/用户太多所致。我的工作涉及维护一个库,libdisksupervisor.so,它偶尔用于通过以下方式启动磁盘管理器程序来监督它: LD_PRELOAD=/public/libdisksupervisor.so /sbin/diskmanager 我们这样做的原
..
我正在阅读《计算机系统:程序员的视角》,我看到了以下C文件: foo.c: void f(void); int x = 15213; int y = 15212; int main() { f(); printf("x = 0x%x y = 0x%x ", x, y); return 0; } Bar.c: double x; void f()
..
使用通过‘node-gyp’传递的链接器命令行选项,我指定希望程序链接的库路径和库名称。但生成的可执行文件没有引用我指定的文件,它在/usr/lib中引用了不同的名称。 我正在使用binding.gyp中的库节引用本地lib目录。 'libraries': [ '-lao-oboe', '-L
..
我正在开发一个ARM裸机应用程序,我已经用NOLOAD标记了一些部分。根据Understanding链接器脚本未加载部分》中的解释 ,我原以为生成的ELF文件不是具有这些节的可加载段(程序头),但它确实有。 这样对吗?为什么在ELF文件中将这些节标记为可加载? 由于链接器仍将数据放在.bss中,加载器如何知道不应加载节?还是因为NOLOAD只对初始化的符号(通常放在.data中)有意义,所
..
在Linux上,ld.so(8)手册页讨论了动态库的搜索顺序。它说DT_RPATH已弃用,还提到了DT_RUNPATH。未提及-rpath链接器选项。 ld(1)手册页提到-rpath和-rpath-link选项,但从未提及DT_RPATH或DT_RUNPATH,除非是在说明库搜索顺序中,这当然与ld.so(8)中提供的信息不匹配。 最后是一个LD_RUN_PATH环境变量。ld(1)表示
..
fmod的示例代码: #include #include int main(void) { double x = 0.14527, y = 3.14159; printf("fmod(x, y) = %.6lf ", fmod(x, y)); return 0; } 编译: $ gcc
..
我一直在尝试编译我的项目,但遇到了undefined reference个错误。例如: installertest.cpp:(.text+0x9d1): undefined reference to `XmlRpcValue::makeArray()' ... installertest.cpp:(.text+0xede): undefined reference to `dbcancel'
..
我正在尝试将一个应用程序与Ubuntu 18.04上的GC链接起来。LD找不到libjasper库。我使用以下命令手动安装了它: sudo apt update sudo apt install libjasper1 libjasper-dev 但收到此错误: /usr/bin/ld: cannot find -llibjasper 我尝试使用此命令添加库,但不起作用:
..
我已将问题简化为以下最小测试。c: #include "png.h" int function() { printf("%ld", (long)png_create_read_struct); } 使用 编译 gcc -shared -fPIC test.c -o test.so -lm -l:libpng16.a 显示错误 /usr/bin/ld: /usr/l
..
我正在尝试与我的 C++ 程序中的共享库链接. 我使用的命令:g++ -o client Client.cpp -L.-lprint 以下是错误: /usr/bin/ld: client:/usr/lib/gcc/i486-linux-gnu/4.4.3/crtbegin.o 中的隐藏符号 `__dso_handle' 被 DSO 引用/usr/bin/ld:最终链接失败:输出中不可
..
考虑这个文件,first.cpp,包含一个类定义和使用: #include 结构 Foo{Foo(){ std::cout
..
我知道这表明存在链接器问题,主要是未解析的符号.我知道要解决该问题/摆脱该错误消息,必须提供更多信息.我知道在 SO 上解决这个问题有很多问题. 我的问题旨在帮助理解 make 和 ld,找出什么(和谁)试图用这条线表达什么. collect2: ld 返回 1 个退出状态 “collect2:"是什么意思?它是一个步骤 make 调用吗?我在我的系统上找不到具有该名称的可执行文件.
..
假设我有一个文件 main.cpp,它使用 libmath 中定义的 sin() 函数.还假设我们在同一目录中同时拥有 libmath.a 和 libmath.so.现在,如果我发出命令 g++ -o main main.cpp -lmath,Linux 的默认行为是链接到共享库 libmath.so.我想知道有没有办法强制程序与静态库 libmath.a 链接而不删除或移动共享库? 解决方
..