您试图智取 buid 系统,它也智取了您。
硬编码路径通常是一个坏主意。
Debian(而 ubuntu 只是一个衍生产品)已经开始在依赖于架构的目录中发布二进制文件(如库),以允许在单个系统上安装多个架构。
这些库安装在/usr/lib/<host-triplet>
中,<host-triplet>
具体取决于架构;例如,带有linux和gnu工具的系统x86_64-linux-gnu
的amd64架构。32 位系统通常会有一个.i386-linux-gnu
由于您将库路径硬编码到 64 位位置( ),这在除64 位/linux/gnu/usr/lib/x86_64-linux-gnu/libm.so
之外的所有系统上都会失败。
相反,您应该只告诉链接器链接到m库(libm
),resp X11库(libX11
)。让链接器负责选择正确的架构:
relay_LDADD = -lm -lX11 $(RELAY_LIBS)
一般来说,如果你想链接一个库foo,它提供了一个libfoo.so
你可以使用的库文件-lfoo
(去掉前导lib
和尾随.so
)。
然而,有时这还不够;在这些情况下,您的库可能会pkg-config
用来提供针对该库进行编译/链接所需CFLAGS
的全部内容。LDFLAGS
例如,如果我想使用libquicktime
:
$ pkg-config --cflags libquicktime
-I/usr/include/lqt
$ pkg-config --libs libquicktime
-lquicktime -lpthread -lm -lz -ldl
所以我会使用类似的东西:
myprog_CFLAGS += $(shell pkg-config --cflags libquicktime)
myprog_LDADD += $(shell pkg-config --libs libquicktime)
这适用于任何 GNU(?) Makefile(与自动工具无关)。在 autotools 项目中,您可能会configure
使用 m4-macro将 pkg-config 检查移至PKG_CHECK_MODULES