我如何更改automake的CXXLINK中的顺序?
How do I change the order in automake's CXXLINK?
我正在尝试使用 automake 工具编译一个简单的 C++ 程序。 automake 本身在其 Makefile 中创建了以下行:CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@
然而,通过这种方式,我得到了一些链接器错误,只需将 -o example example.cpp
部分放在 g++ 命令的开头而不是结尾即可解决。
如何指示 automake 将 -o example example.cpp
放在链接器命令的前面?
这是Makefile.am
bin_PROGRAMS = GLTest
GLTest_SOURCES = main.cpp
AM_CXXFLAGS=@gllibs_CFLAGS@ -std=c++11 -pthread
AM_LDFLAGS=@gllibs_LIBS@ -lGL -lGLEW -lglfw -lX11 -lXi -lXrandr
以下是链接器错误:
g++ -I/usr/include/libdrm -std=c++11 -pthread -g -O2 -lGLEW -lGLU -lGL -lglfw -lGL -lGLEW -lglfw -lX11 -lXi -lXrandr -o GLTest main.o
main.o: In function `main':
main.cpp:8: undefined reference to `glfwInit'
main.cpp:9: undefined reference to `glfwWindowHint'
main.cpp:10: undefined reference to `glfwWindowHint'
main.cpp:11: undefined reference to `glfwWindowHint'
main.cpp:12: undefined reference to `glfwWindowHint'
main.cpp:14: undefined reference to `glfwCreateWindow'
collect2: error: ld returned 1 exit status
这些是我手动编译时解决的:
g++ -o GLTest main.cpp -I/usr/include/libdrm -std=c++11 -pthread -g -O2 -lGLEW -lGLU -lGL -lglfw -lGL -lGLEW -lglfw -lX11 -lXi -lXrandr
从输出中的链接器命令来看,您似乎没有使用 libtool
。
尝试将 AM_PROG_LIBTOOL
添加到 configure.ac
。
你做错了。问题是您将库作为 LDFLAGS
传递,这是不正确的。
你应该
GLTest_LDADD = $(gllibs_LIBS)
这样你就可以正确地告诉 automake 这些是库。
使用 libtool 可能 工作,这取决于所使用的 libtool 版本,因为它可以对命令行进行排序,但在其他情况下这样做仍然是错误的并且会失败。
我正在尝试使用 automake 工具编译一个简单的 C++ 程序。 automake 本身在其 Makefile 中创建了以下行:CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@
然而,通过这种方式,我得到了一些链接器错误,只需将 -o example example.cpp
部分放在 g++ 命令的开头而不是结尾即可解决。
如何指示 automake 将 -o example example.cpp
放在链接器命令的前面?
这是Makefile.am
bin_PROGRAMS = GLTest
GLTest_SOURCES = main.cpp
AM_CXXFLAGS=@gllibs_CFLAGS@ -std=c++11 -pthread
AM_LDFLAGS=@gllibs_LIBS@ -lGL -lGLEW -lglfw -lX11 -lXi -lXrandr
以下是链接器错误:
g++ -I/usr/include/libdrm -std=c++11 -pthread -g -O2 -lGLEW -lGLU -lGL -lglfw -lGL -lGLEW -lglfw -lX11 -lXi -lXrandr -o GLTest main.o
main.o: In function `main':
main.cpp:8: undefined reference to `glfwInit'
main.cpp:9: undefined reference to `glfwWindowHint'
main.cpp:10: undefined reference to `glfwWindowHint'
main.cpp:11: undefined reference to `glfwWindowHint'
main.cpp:12: undefined reference to `glfwWindowHint'
main.cpp:14: undefined reference to `glfwCreateWindow'
collect2: error: ld returned 1 exit status
这些是我手动编译时解决的:
g++ -o GLTest main.cpp -I/usr/include/libdrm -std=c++11 -pthread -g -O2 -lGLEW -lGLU -lGL -lglfw -lGL -lGLEW -lglfw -lX11 -lXi -lXrandr
从输出中的链接器命令来看,您似乎没有使用 libtool
。
尝试将 AM_PROG_LIBTOOL
添加到 configure.ac
。
你做错了。问题是您将库作为 LDFLAGS
传递,这是不正确的。
你应该
GLTest_LDADD = $(gllibs_LIBS)
这样你就可以正确地告诉 automake 这些是库。
使用 libtool 可能 工作,这取决于所使用的 libtool 版本,因为它可以对命令行进行排序,但在其他情况下这样做仍然是错误的并且会失败。