- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我需要在另一个没有安装 mudflap 库并且具有不同 glibc 版本的 linux 发行版中运行我的程序。我试图用 -static 编译我的程序,但这是不可能的:
warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
因此,我正在尝试 -nostdlib 并手动附加库,但出现以下错误:
myuser@linux:~/Desktop$ gcc -nostdlib -Wl,-dynamic-linker,/home/myuser/Desktop/ld-linux-x86-64.so.2,-rpath,/home/myuser/Desktop /home/myuser/Desktop/libc.so.6 -fmudflap /home/myuser/Desktop/libmudflap.so.0 /home/myuser/Desktop/libdl.so.2 simple.cmyuser@linux:~/Desktop$ ./a.outmf: dlsym("mmap") = NULLAborted (core dumped)myuser@linux:~/Desktop$ ldd a.out linux-vdso.so.1 => (0x00007fff2bad2000) libc.so.6 => /home/myuser/Desktop/libc.so.6 (0x00007fddfd521000) libmudflap.so.0 => /home/myuser/Desktop/libmudflap.so.0 (0x00007fddfd175000) libdl.so.2 => /home/myuser/Desktop/libdl.so.2 (0x00007fddfcf70000) /home/myuser/Desktop/ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2 (0x00007fddfd884000)myuser@linux:~/Desktop$
最佳答案
与其尝试静态链接库,不如将它们与您的可执行文件一起携带,并让 LD_LIBRARY_PATH 或 rpath 指向包含它们的目录。
但是永远不要携带 libc,如果你在旧的 libc 版本上链接你的程序你应该是安全的。这意味着您需要在较旧或与目标系统完全相同的环境中编译您的应用程序。
只要您不使用在编译系统和目标系统之间进行版本更新的符号,您就可以使用更新的系统。
不幸的是,静态链接比听起来要复杂得多。
关于c - gcc -nostdlib 和 mudflap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5777067/
编译/链接 -nostdlib似乎阻止静态初始化,即使我添加了自己的 crti.s 和 crtn.s .init/.fini部分。 是否有使 g++ 生成插入在 .init 中的静态初始化代码的变通方
如果我使用选项 -nostdlib 调用 GCC 链接器,这是否会覆盖标准库的任何手动/显式附录? GCC 是来自 MinGW 的 4.8.1。 例子: gcc -nostdlib [MyObject
我正在尝试为一个可执行文件设置我自己的运行时环境,但我无法让 clang(v3.4-1ubuntu1,目标:x86_64-pc-linux-gnu)生成一个不支持的可执行文件段错误。我已将问题简化为以
这怎么可能在编译时不将 stdlib (mscorlib.dll) 包含到我的 C# 应用程序中?据我所知,所有类都继承了 System.Object 类,该类定义在 mscorlib.dll 中。更
我有以下代码: void cp(void *a, const void *b, int n) { for (int i = 0; i : 1000: b8 00 00 00 00
我有一个包含构造函数的动态库。 __attribute__ ((constructor)) void construct() { // This is initialization code
我正在试验入口点并遇到段错误。 程序.c: int main() { return 0; } 编译和链接: gcc -Wall prog.c -nostdlib -c -o prog.o
我需要在另一个没有安装 mudflap 库并且具有不同 glibc 版本的 linux 发行版中运行我的程序。我试图用 -static 编译我的程序,但这是不可能的: warning: Using '
我正在尝试生成一个不依赖于 libc(或任何其他)的可执行文件。首先,我这样做了: // test.c void _start() { // write(1, "hello!\n", 7);
我的家庭作业要求我们使用系统调用而不是标准库来打开、读取和写入文件。为了调试它,我想在测试编译项目时使用 std 库。我这样做了: #ifdef HOME //Home debug prinf f
我为链接器提供了我的文件:ld-2.7.so、libc-2.7.so 和 crt1.o,但未能成功编译。是否可以链接到与默认 glibc 不同的 glibc? (静态编译或安装单独的 glibc 不是
我正在使用带有 x84-elf64-gcc 编译器的 64 位 linux 机器。我刚刚开始低级编程,想了解 C 代码实际上是如何翻译成二进制的。这主要用于操作系统开发,因为我知道处理器不理解 ELF
我正在使用带有 x84-elf64-gcc 编译器的 64 位 linux 机器。我刚刚开始低级编程,想了解 C 代码实际上是如何翻译成二进制的。这主要用于操作系统开发,因为我知道处理器不理解 ELF
我在 gcc 编译选项下遇到了 -nostartfiles 和 -nostdlib 选项。但是,我不明白如何为上述选项编写代码。您是否需要编写每个启动函数(如 _start、__libc_csu_in
我编写了一个 Makefile,用另一个应用程序编译我的迷你操作系统。我必须使用 -nostdioc 和 -nostdlib 来编译它们,但问题是,该应用程序正在使用 stdio/stdlib 函数,
我正在尝试使用带有 this toolchain 的 CMake 在 arm 架构中创建一个 hello world 我的主.c int main() { char *str = "Hello W
我是一名优秀的程序员,十分优秀!