ld:找不到文件:/usr/lib/crt1.o

时间:2017-05-23 17:15:50

标签: c++ macos fortran shared-libraries macos-sierra

当尝试在Mac OS X Sierra上使用PGI编译Fortran时,我收到错误

ld: file not found: /usr/lib/crt1.o

我找到了旧Mac OS X版本(http://www.pgroup.com/userforum/viewtopic.php?t=4578

的解决方法
sudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/lib/crt1.o /usr/lib/crt1.o 

但是,对于Sierra,系统完整性保护会阻止在/usr/bin中写入。我该如何解决这个问题?

我尝试链接到/usr/local/bin/(允许),但是,我怎样才能确保编译器在该路径中搜索库?

4 个答案:

答案 0 :(得分:9)

仅安装Mac OS X的命令行工具解决了这个问题。在您的终端中执行此操作:

xcode-select --install

答案 1 :(得分:1)

答案 2 :(得分:0)

命令行程序的解决方案:

对我来说正确的答案如以下链接所述:

https://medium.com/@kviat/free-pascal-3-0-2-linking-on-macos-sierra-c40706e86fda

  

经过一番谷歌搜索后,我意识到大多数库已从   macOS Sierra中的/ usr / lib。但是这种情况是在FPC中处理的,所以我们   只需将内部编译器变量MacOSXVersionMin设置为10.8   (或更高版本)。没有标准的编译器选项,但是之后   我在源代码中进行了一些搜索,找到了解决方法:设置环境   变量MACOSX_DEPLOYMENT_TARGET:

您应该指定MacOS的部署目标:

MACOSX_DEPLOYMENT_TARGET= XX.XX #for instance 10.15

一般解决方案:

将必要的文件链接到/ usr / bin / crt *。如前所述,MacO从10.10开始将禁止这种链接。但是仍然有一种方法可以完成此链接过程,并且可以解决该问题。

1)听到启动提示音后,重新启动Mac并同时按住Command + R键,这会将Mac OS X引导到恢复模式

2)当出现“ MacOS Utilities” /“ OS X Utilities” 屏幕时,请下拉屏幕顶部的“ Utilities”菜单,然后选择“ Terminal”。 ”

3)在终端中键入以下命令,然后按回车键:

csrutil disable; reboot

4)当您回来时,运行命令sudo mount -uw /

5)只需运行您想要的链接代码:

sudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/lib/crt1.o /usr/lib/crt1.o

来源:http://osxdaily.com/2015/10/05/disable-rootless-system-integrity-protection-mac-os-x/ https://www.reddit.com/r/MacOS/comments/caiue5/macos_catalina_readonly_file_system_with_sip/

答案 3 :(得分:0)

就我而言,问题实际上是PGI安装方面的错误。 PGI似乎很清楚,macOS的较新版本没有/usr/lib/crt1.o,并且您无法再在其中创建文件。但是可以为PGI编译器设置正确的环境变量,然后链接器应使用指向crt1.o的正确路径。

应在PGI编译器套件的安装过程中通过运行makelocalrc命令自动完成此配置,并应生成文件/opt/pgi/osx86-64/$PGIVER/bin/localrc。但就我而言,这一步骤无声地失败了。

失败的原因似乎是:

  • 尚未接受XCode的许可协议,尽管此错误会使您留下/opt/pgi/osx86-64/$PGIVER/bin/localrc.error,其中包含一些详细信息
  • 不支持XCode版本,似乎没有任何帮助。这是我手动运行makelocalrc脚本时得到的:
makelocalrc -x /opt/pgi/osx86-64/19.10
 Error: Unsupported XCode version  11

在我的情况下(PGI 19.10,macOS 10.15,XCode 11.2.1),我手动修补了/opt/pgi/osx86-64/19.10/bin/makelocalrc以便在XCode 11上不会出错:

if test $xcodever -gt 11 ; then  # <-- was "-gt 10"!
     echo " Error: Unsupported XCode version "  $xcodever
     exit  -1
fi

,然后重新运行脚本,然后使用PGI编译器(pgccpgfortran)进行编译:

sudo /opt/pgi/osx86-64/2019/bin/makelocalrc -x /opt/pgi/osx86-64/19.10

您的情况可能会有所不同,但是您可能需要检查/opt/pgi/osx86-64/$PGIVER/bin/localrc.error/opt/pgi/osx86-64/$PGIVER/bin/localrc本身,如果不存在或升级了XCode /自从安装了PGI编译器后,就进入了macOS。