c - 无法使 libtool 合并 yasm 创建的目标文件

标签 c automake libtool yasm

我正在尝试让 libtoolyasm 一起工作。

yasm 从我的 .asm 源创建正确的 .o 文件,但我不知道如何获取 libtool 构建相关的 .lo.dep 文件。 它想要构建共享库,合并 .o 文件。

最佳答案

libtool生成的文件通常使用以下布局: .lo文件在 build由位置元数据组成的目录;静态对象 .o build 中的文件目录;和 PIC/共享 .o build/.libs 中的对象目录。

您可以使用 libtool 编译模式。我不熟悉 yasm,所以你必须填写开关。它将运行 yasm构建两次,一次使用 -DPIC (可能还有其他共享对象选项)。

libtool --tag=CC --mode=compile yasm <options> src.asm

如果使用 automake,这可能需要对 .asm 的显式规则文件:

.asm.lo:
        $(LIBTOOL) --tag=CC --mode=compile \
        yasm <options> $<

请记住,这些是 Makefile 中的制表符,而不是 (8) 个空格字符! 您可能还需要添加:.SUFFIXES: .asm .lo在此之前。我使用变量 $(LIBTOOL) ,因为某些平台(例如 OSX)需要将其安装为 glibtool ,这就是Makefile.in

生成的src.lo , src.o , .libs/src.o应该受到尊重 make clean例如。

为您的图书馆 libfoo ,您需要通过以下方式让 automake 了解这些来源:EXTRA_libfoo_la_SOURCES = src.asm , 和 obj deps 与 libfoo_la_LIBADD = src.lo .甚至可能值得添加到依赖项:libfoo_la_DEPENDENCIES = src.lo .

虽然我不明白为什么只放 src.asmlibfoo_la_SOURCES还不够。

关于c - 无法使 libtool 合并 yasm 创建的目标文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39413673/

相关文章:

autotools - Libtool 安装警告 : xxx. la 尚未安装在/user/local/lib

C: fgets 总是 NULL

c - 异常行为 : typedef and object of same name

c - 将 $(sysconfdir) 从 Autoconf/Automake 传递到源代码

autotools - 配置:警告: 'missing' 脚本太旧或丢失

c - 检索使用 autotool 生成的 lib 版本

vmware - 使用 libtool 而不使用链接

c - 删除堆的根没有任何效果

c - 如何处理文件处理函数的 "*** glibc detected *** ./a: double free or corruption (top): "错误?

build - 条件子目录对象