0

我有一些带有check框架的 C 单元测试。

我的Makefile.am样子:

check_PROGRAMS = check_fseqs
check_fseqs_SOURCES = tests/check_fseqs.c
check_fseqs_LDADD = -lcheck

文件结构是(省略了一些文件):

.
|-- Makefile.am
|-- configure.ac
|-- src
|   |-- fseqs.c
|   |-- fseqs.h
|   |-- fseqs.o
`-- tests
    `-- check_fseqs.c

然后我跑make check,它抛出:

$ make check
/Applications/Xcode.app/Contents/Developer/usr/bin/make  check_fseqs
gcc  -g -O2   -o check_fseqs tests/check_fseqs.o -lcheck 
Undefined symbols for architecture x86_64:
  "_f_msb", referenced from:
      _test_f_msb in check_fseqs.o
  "_min", referenced from:
      _test_min in check_fseqs.o
  "_substract", referenced from:
      _test_substract in check_fseqs.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[1]: *** [check_fseqs] Error 1
make: *** [check-am] Error 2

怎么了?

4

1 回答 1

1

您缺少依赖项。如果您正在构建 fseqs.o,则需要将其添加为并将其check_DEPENDENCIES添加到您的check_LDADD行中。如果它是一个库,你会做同样的事情,指定库文件而不是所有组成库的目标文件。

check_DEPENDENCIES位确保生成正确的规则,并check_LDADD确保在链接时将文件添加到命令行。

于 2014-03-18T13:01:11.430 回答