首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ubuntu LDFLAGS --按需

Ubuntu LDFLAGS --按需
EN

Stack Overflow用户
提问于 2012-07-22 05:39:32
回答 1查看 3.5K关注 0票数 4

我有一个不能正确链接的C项目,我怀疑这是因为gcc传递给ld程序的-as-needed标志。由于该标志,gcc认为在*.c文件之前列出的任何链接库都是不必要的,因此不会链接它们。

代码语言:javascript
复制
PREFIX?=/usr/local
CFLAGS=-D_LARGEFILE64_SOURCE=1 -g -Wall -I${PREFIX}/apr/include/apr-1  -I${PREFIX}/apr/include/apr-util-1
LDFLAGS=-lapr-1 -pthread -laprutil-1

all: devpkg
devpkg: bstrlib.o db.o shell.o commands.o 
install: all
    install -d $(DESTDIR)/$(PREFIX)/bin/
    install devpkg $(DESTDIR)/$(PREFIX)/bin/

clean:
    rm -f *.o
    rm -f devpkg
    rm -rf *.dSYM

当我运行这个makefile时,我得到了以下内容。

代码语言:javascript
复制
cc -D_LARGEFILE64_SOURCE=1 -g -Wall -I/usr/local/apr/include/apr-1  -I/usr/local/apr/include/apr-util-1   -c -o bstrlib.o bstrlib.c
cc -D_LARGEFILE64_SOURCE=1 -g -Wall -I/usr/local/apr/include/apr-1  -I/usr/local/apr/include/apr-util-1   -c -o db.o db.c
cc -D_LARGEFILE64_SOURCE=1 -g -Wall -I/usr/local/apr/include/apr-1  -I/usr/local/apr/include/apr-util-1   -c -o shell.o shell.c
cc -D_LARGEFILE64_SOURCE=1 -g -Wall -I/usr/local/apr/include/apr-1  -I/usr/local/apr/include/apr-util-1   -c -o commands.o commands.c
cc -D_LARGEFILE64_SOURCE=1 -g -Wall -I/usr/local/apr/include/apr-1  -I/usr/local/apr/include/apr-util-1  -lapr-1 -pthread -laprutil-1  devpkg.c bstrlib.o db.o shell.o commands.o   -o devpkg
/tmp/ccZcAm9b.o: In function `main':
/home/zach/Desktop/devpkgzed/devpkg.c:14: undefined reference to `apr_pool_initialize'
/home/zach/Desktop/devpkgzed/devpkg.c:15: undefined reference to `apr_pool_create_ex'
/home/zach/Desktop/devpkgzed/devpkg.c:29: undefined reference to `apr_getopt_init'
/home/zach/Desktop/devpkgzed/devpkg.c:31: undefined reference to `apr_getopt'

我的问题是,我并不真正理解make是如何通过设置的CFLAGS来实现这些命令的。我如何才能让链接器选项遵循编译部分,而不是相反的方式,这会引发这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-23 01:36:34

Make具有编译源文件、链接可执行文件和库的内置规则。您列出的命令是由这些规则生成的。

这对您来说失败的原因是,当链接时,库应该列在目标文件之后,因为链接器对其参数执行一次遍历,并将丢弃在看到它们时未解析的任何符号。要纠正这个错误,请将您的库放入LDLIBS变量中,而不是LDFLAGS变量中(即只需将LDFLAGS替换为LDLIBS即可)。LDFLAGS变量用于链接器的非库选项,如-L-shared

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11596044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档