Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos ld:在OSX 10.6上找不到带gcc/clang-static标志的-lcrt0.o的库_Macos_Gcc_Ld - Fatal编程技术网

Macos ld:在OSX 10.6上找不到带gcc/clang-static标志的-lcrt0.o的库

Macos ld:在OSX 10.6上找不到带gcc/clang-static标志的-lcrt0.o的库,macos,gcc,ld,Macos,Gcc,Ld,当我尝试构建以下程序时: #include <stdio.h> int main(void) { printf("hello world\n"); return 0; } 它返回以下内容: ld: library not found for -lcrt0.o collect2: ld returned 1 exit status 有没有其他人遇到过这种情况,或者是没有其他人受到过影响?有办法吗 谢谢这行不通。从gcc的man页面: 除非所有库(包括libgcc.a)也使

当我尝试构建以下程序时:

#include <stdio.h>

int main(void)
{
  printf("hello world\n");
  return 0;
}
它返回以下内容:

ld: library not found for -lcrt0.o
collect2: ld returned 1 exit status
有没有其他人遇到过这种情况,或者是没有其他人受到过影响?有办法吗


谢谢

这行不通。从
gcc
man
页面:

除非所有库(包括libgcc.a)也使用-static编译,否则此选项在MacOSX上不起作用。由于既没有提供libSystem.dylib的静态版本,也没有提供crt0.o的静态版本,因此此选项对大多数人都没有用处


您也可以尝试LLVM LLD链接器-我为我的两个主要操作系统预构建了版本-

这一个让我能够正确地链接例如:“Qemu”——这是不可能的,因为ld是由苹果预先安装的


最后一个问题是-使用libstdc++(不要)自己构建GCC。

根据Nate的回答,完全静态的应用程序显然是不可能的-另请参见man ld

-static生成不使用dyld的mach-o文件。仅用于构建内核

与静态库链接的问题在于,如果在同一目录中同时找到库的静态版本和动态版本,则会优先选择动态版本。避免这种情况的三种方法是:

  • 不要试图通过-L和-L选项查找它们;相反,在编译器或链接器命令行上指定要使用的库的完整路径

    $g++-Wall-Werror-o hi/usr/local/lib/libboost\u unit\u test\u framework.ahi.cpp

  • 创建一个单独的目录,其中包含指向静态库的符号链接,使用-L选项首先搜索此目录,并使用-L选项指定要使用的库

    $g++-Wall-Werror-L./staticBoostLib-L boost\u unit\u test\u框架-o hi hi.cpp

  • 与其在不同目录中创建同名链接,不如在同一目录中创建同名链接,并在-l参数中指定该名称

    $g++-Wall-Werror-l增压单元测试框架静态


  • 谢谢这对我很有用,因为我对逆向工程感兴趣:P@browneye-你能想出如何在没有静态的情况下在mac上进行反向工程吗???同样值得一提的是-它可能需要LLVM 3.9本身以libc++编译,以支持传递给linker的“-static-lc++”。相关:这是否回答了你的问题?
    ld: library not found for -lcrt0.o
    collect2: ld returned 1 exit status