我正在尝试让 libtool
和 yasm
一起工作。
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.asm
在libfoo_la_SOURCES
还不够。
关于c - 无法使 libtool 合并 yasm 创建的目标文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39413673/