相关疑难解决方法(0)

如何在OS X上进行静态链接

我正在尝试链接到OS X上的静态库.我-static在gcc命令中使用了该标志,但是我收到以下错误消息:

ld_classic: can't locate file for: -lcrt0.o
collect2: ld returned 1 exit status

我查看了手册页,它的内容如下:

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

有没有其他方法可以链接到这个静态库?

macos linker static-libraries

51
推荐指数
4
解决办法
3万
查看次数

从LLVM bitcode生成Rust可执行文件

如何生成用Rust编写的编译成LLVM-IR bitcode的应用程序的可执行文件?

如果我尝试使用rustc编译.bc文件,它告诉我stream did not contain valid UTF-8,我似乎无法弄清楚是否在rustc中有特定选项.

基本上我想实现这个目标: program.rs- > program.bc- > program.program最终的可执行文件在哪里.我应该采取什么措施来实现这一目标?

rust llvm-ir bitcode

9
推荐指数
2
解决办法
1241
查看次数

如何使用Stack在OS X上创建静态可执行文件?

我想为Darwin创建一个静态可执行文件,用于一个我编写的名为difftodo的小型实用程序。difftodo间接取决于pcre,我希望人们能够下载二进制文件并运行它而不必先执行brew install pcre

如果我不使用选项进行编译,则会得到一个可动态链接pcre的二进制文件:

$ otool -L /Users/jml/src/difftodo/.stack-work/install/x86_64-osx/lts-7.1/8.0.1/bin/git-todo
/Users/jml/src/difftodo/.stack-work/install/x86_64-osx/lts-7.1/8.0.1/bin/git-todo:
        /usr/local/opt/pcre/lib/libpcre.1.dylib (compatibility version 4.0.0, current version 4.7.0)
        /usr/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1)
Run Code Online (Sandbox Code Playgroud)

按照https://github.com/commercialhaskell/stack/issues/1032上的说明,我尝试了以下操作:

$ stack build --ghc-options -static --ghc-options -optl-static
difftodo-0.2.0: configure
Configuring difftodo-0.2.0...
difftodo-0.2.0: build
Preprocessing library difftodo-0.2.0...
ld: illegal text reloc in '_c1TGM_info' to '_stg_sel_1_upd_info' for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
`gcc' failed …
Run Code Online (Sandbox Code Playgroud)

macos haskell-stack

6
推荐指数
0
解决办法
324
查看次数

“_dyld_start”在我的分析结果中意味着什么?

我正在使用callgrind. 这是我第一次这样做。我发现最高级别的函数(我认为是负责启动程序运行的函数)被称为_dyld_start. 我想知道这到底是什么。

另外,在我的一些需要很长时间运行的程序上,我的main()函数占用了 ; 调用的所有函数的大约 99% 的时间_dyld_start;然而,在我的程序中,运行时间较短(大约半秒),我发现main()只花费了大约 85% 的_dyld_start时间,其余的时间都会dyldbootstrap::start()。我假设这是一个与启动 C++ 程序相关的函数。它占用 85% 的_dyld_start运行时间是否合理?

我正在使用 C++11 标准编译我的代码。我正在我的 OS/X 上编译,所以我使用clang. 我的valgrind版本是3.10.0。

c++ macos profiling dyld c++11

5
推荐指数
1
解决办法
2299
查看次数

如何在“OS X Framework-build python”中与libpython建立静态链接

libpython2.7我正在尝试与on建立静态链接Mac OS X 10.11

虽然静态链接可以成功地与libpython2.7.ain 一起使用pyenv(anaconda)-build python,但它不能与libpython2.7.ain 一起使用Framework-build python

创建静态 Mac OS XC 版本

由于该-static选项似乎不适用于 Mac OS X,因此我尝试了以下方法。

CXXFLAGS=-I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7
LIBS=/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/config/libpython2.7.a

$ g++ -o main main.cc $(CXXFLAGS) $(LIBS)
Run Code Online (Sandbox Code Playgroud)

并得到以下结果。

$ otool -L main
main:
    /System/Library/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.10)
    /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.1.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1)
Run Code Online (Sandbox Code Playgroud)

与 的链接libpython2.7.a导致与 的动态链接Versions/2.7/Python

我还发现 和libpython2.7.a都是libpython2.7.dylib到 …

c++ python macos gcc g++

5
推荐指数
0
解决办法
997
查看次数

如何为 macOS 构建可移植的静态 C 库

我想构建一个可移植的静态 C 库,无论 macOS 版本如何,都可以链接到 macOS 二进制文件。C 库没有任何依赖项(即没有 stdlib,没有特定于操作系统的调用)。唯一的依赖是 CPU,它必须是 x86_64。

当提取相关的编译器三元组时,我得到x86_64-apple-darwin16.7.0了 Sierra 和x86_64-apple-darwin17.2.0High Sierra。另外,当我在 High Sierra 上构建时,如果我使用 Sierra 的静态库(即使我指定--target x86_64-apple-darwin16.7.0为 clang),则会出现警告。

  • 如何为 macOS 构建真正可移植的静态库?如果不可能的话,有什么办法呢?每个主要 macOS 版本都有一个从同一版本构建的不同版本?是否存在从过时的 Xcode 版本中复制 SDK 的黑客行为?请记住,我的库是完全可移植的,并且不以任何方式依赖于 macOS 或 stdlib。

  • 编译器三元组末尾的版本部分重要吗?

c macos portability cross-compiling static-libraries

5
推荐指数
1
解决办法
5936
查看次数