【发布时间】:2020-06-16 10:13:28
【问题描述】:
结构:
-myProject
-Makefile.am
-configure.ac
-src
-Makefile.am
-main.c
-test.c
-test.h
当我尝试编译时,我收到错误未定义的对 test.c 中函数的引用。
Makefile.am:
AUTOMAKE_OPTIONS = foreign
SUBDIRS=src
src/Makefile.am:
bin_PROGRAMS = TEST
AM_CXXFLAGS =-Wall -Wno-psabi -w -pthread -I/usr/local/include
AM_CFLAGS =-Wall -w
#Sources
TEST_SOURCES = test.c main.cpp
TEST_LDADD = @LDFLAGS@ -lmosquitto
TEST_LDFLAGS =-lmosquitto
似乎无法链接这两个来源。有人可以帮帮我吗?
错误:
make all-recursive
make[1]: Entering directory '/media/sf_Shared/Software/executables/TEST'
Making all in src
make[2]: Entering directory '/media/sf_Shared/Software/executables/TEST/src'
g++ -DHAVE_CONFIG_H -I. -I.. -Wall -Wno-psabi -w -pthread -I/usr/local/include -g -O2 -MT main.o -MD -MP -MF .deps/main.Tpo -c -o main.o main.cpp
mv -f .deps/main.Tpo .deps/main.Po
g++ -Wall -Wno-psabi -w -pthread -I/usr/local/include -g -O2 -lmosquitto -o TEST test.o main.o -lmosquitto
/usr/bin/ld: main.o: in function `main':
/media/sf_Shared/Software/executables/TEST/src/main.cpp:564: undefined reference to `open_ports(unsigned int, unsigned int)'
collect2: error: ld returned 1 exit status
make[2]: *** [Makefile:366: TEST] Error 1
make[2]: Leaving directory '/media/sf_Shared/Software/executables/TEST/src'
make[1]: *** [Makefile:359: all-recursive] Error 1
make[1]: Leaving directory '/media/sf_Shared/Software/executables/TEST'
make: *** [Makefile:300: all] Error 2
我在 main.cpp 中包含了 test.h。有声明的函数open_ports(u_int32_t open_ports(u_int32_t a, u_int32_t b);),在test.c中实现
【问题讨论】:
-
引用完整的错误并显示它适用的调用/函数。展示如何声明该函数以及如何调用它。可能是 C/C++ 链接的混合让你感到困惑。
-
仅供参考,与实际问题无关:将
@LDFLAGS@添加到非_LDFLAGS变量看起来很可疑。改为将其添加到_LDFLAGS。
标签: c++ linker-errors automake