未定义的引用使用 automake
Undefined reference use automake
我的项目结构是这样的
-myProject
-Makefile.am
-configure.ac
-src
-Makefile.am
-add.c
-add.h
-tests
-Makefile.am
-tests.c
Makefile.am
SUBDIRS = src tests
ACLOCAL_AMFLAGS = -I m4
src / Makefile.am
AM_CFLAGS = -Wall -lcunit -nostartfiles
bin_PROGRAMS = addNum
addNum_SOURCES = add.c
addNum_CFLAGS = $(AM_CFLAGS)
src / add.c
#include <stdio.h>
#include <stdlib.h>
#include "add.h"
int addNum(int a, int b){
return a+b;
}
测试/Makefile.am
AM_CFLAGS = -Wall -lcunit
INCLUDES = -I$(top_srcdir)/src -I../src
noinst_LTLIBRARIES = libsrc.la
libsrc_la_SOURCES = -I$(top_srcdir)/src
libsrc_la_CFLAGS = $(AM_CFLAGS)
bin_PROGRAMS = test
test_SOURCES = tests.c
test_CFLAGS = $(AM_CFLAGS)
test_LDADD = libsrc.la
测试/tests.c
#include <stdio.h>
#include <stdlib.h>
#include "add.h"
int main(void){
printf("num:%d",addNum(1,1));
return 0;
}
错误:
tests.c:6: undefined reference to 'addNum'
我尝试在 tests/tests.c 中包含 addNum 函数。
我错过了什么吗?
谢谢。
排序版本答案更改
libsrc_la_SOURCES = -I$(top_srcdir)/src
到
libsrc_la_SOURCES = -I$(top_srcdir)/src/add.c
这意味着您需要定义 libsrc.la
库需要的源列表。
但我认为您最好按照长版答案的步骤进行操作。
我猜你尝试从 src
目录中的源列表创建一个 libsrc.la
二进制文件,然后 link 这个二进制文件带有一组测试。所以首先你需要在 src
目录中创建库。
src/Makefile.am
AM_CFLAGS = -Wall -lcunit
noinst_LTLIBRARIES = libsrc.la
libsrc_la_SOURCES = add.c
libsrc_la_CFLAGS = $(AM_CFLAGS)
然后 link 使用此库进行测试。
tests/Makefile.am
AM_CFLAGS = -Wall -lcunit
INCLUDES = -I$(top_srcdir)/src -I../src
bin_PROGRAMS = test
test_SOURCES = tests.c
test_CFLAGS = $(AM_CFLAGS)
test_LDADD = ../src/libsrc.la
我的项目结构是这样的
-myProject
-Makefile.am
-configure.ac
-src
-Makefile.am
-add.c
-add.h
-tests
-Makefile.am
-tests.c
Makefile.am
SUBDIRS = src tests
ACLOCAL_AMFLAGS = -I m4
src / Makefile.am
AM_CFLAGS = -Wall -lcunit -nostartfiles
bin_PROGRAMS = addNum
addNum_SOURCES = add.c
addNum_CFLAGS = $(AM_CFLAGS)
src / add.c
#include <stdio.h>
#include <stdlib.h>
#include "add.h"
int addNum(int a, int b){
return a+b;
}
测试/Makefile.am
AM_CFLAGS = -Wall -lcunit
INCLUDES = -I$(top_srcdir)/src -I../src
noinst_LTLIBRARIES = libsrc.la
libsrc_la_SOURCES = -I$(top_srcdir)/src
libsrc_la_CFLAGS = $(AM_CFLAGS)
bin_PROGRAMS = test
test_SOURCES = tests.c
test_CFLAGS = $(AM_CFLAGS)
test_LDADD = libsrc.la
测试/tests.c
#include <stdio.h>
#include <stdlib.h>
#include "add.h"
int main(void){
printf("num:%d",addNum(1,1));
return 0;
}
错误:
tests.c:6: undefined reference to 'addNum'
我尝试在 tests/tests.c 中包含 addNum 函数。 我错过了什么吗? 谢谢。
排序版本答案更改
libsrc_la_SOURCES = -I$(top_srcdir)/src
到
libsrc_la_SOURCES = -I$(top_srcdir)/src/add.c
这意味着您需要定义 libsrc.la
库需要的源列表。
但我认为您最好按照长版答案的步骤进行操作。
我猜你尝试从 src
目录中的源列表创建一个 libsrc.la
二进制文件,然后 link 这个二进制文件带有一组测试。所以首先你需要在 src
目录中创建库。
src/Makefile.am
AM_CFLAGS = -Wall -lcunit
noinst_LTLIBRARIES = libsrc.la
libsrc_la_SOURCES = add.c
libsrc_la_CFLAGS = $(AM_CFLAGS)
然后 link 使用此库进行测试。
tests/Makefile.am
AM_CFLAGS = -Wall -lcunit
INCLUDES = -I$(top_srcdir)/src -I../src
bin_PROGRAMS = test
test_SOURCES = tests.c
test_CFLAGS = $(AM_CFLAGS)
test_LDADD = ../src/libsrc.la