【发布时间】:2015-05-31 01:07:53
【问题描述】:
我正在尝试编译 C 程序,同时链接 APR 库。 我收到以下错误消息:
cc -g -Wall -pthread -I/usr/local/apr/include/apr-1 -I/usr/local/apr/include/apr-util-1 -L/usr/local/apr/lib -L .aprutil-1 -L .apr-1 devpkg.c bstrlib.o db.o shell.o commands.o -o devpkg /tmp/cczC53x5.o:在函数“main”中: /home/yotam/Dropbox/Development/C/devpkg/devpkg.c:14:未定义对“apr_pool_initialize”的引用 /home/yotam/Dropbox/Development/C/devpkg/devpkg.c:15:未定义对“apr_pool_create_ex”的引用 /home/yotam/Dropbox/Development/C/devpkg/devpkg.c:29:未定义对“apr_getopt_init”的引用 /home/yotam/Dropbox/Development/C/devpkg/devpkg.c:31:未定义对“apr_getopt”的引用 db.o:在函数“DB_init”中: /home/yotam/Development/C/devpkg/db.c:89:未定义对“apr_pool_initialize”的引用 /home/yotam/Development/C/devpkg/db.c:90:未定义对“apr_pool_create_ex”的引用 /home/yotam/Development/C/devpkg/db.c:93:未定义对“apr_dir_make_recursive”的引用 /home/yotam/Development/C/devpkg/db.c:105:未定义对“apr_pool_destroy”的引用 /home/yotam/Development/C/devpkg/db.c:109:未定义对“apr_pool_destroy”的引用 shell.o:在函数“Shell_exec”中: /home/yotam/Development/C/devpkg/shell.c:16:未定义对“apr_pool_create_ex”的引用 /home/yotam/Development/C/devpkg/shell.c:38:未定义对“apr_pool_destroy”的引用 /home/yotam/Development/C/devpkg/shell.c:44:未定义对“apr_pool_destroy”的引用 shell.o:在函数“Shell_run”中: /home/yotam/Development/C/devpkg/shell.c:55:未定义对“apr_procattr_create”的引用 /home/yotam/Development/C/devpkg/shell.c:58:未定义对“apr_procattr_io_set”的引用 /home/yotam/Development/C/devpkg/shell.c:62:未定义对“apr_procattr_dir_set”的引用 /home/yotam/Development/C/devpkg/shell.c:65:未定义对“apr_procattr_cmdtype_set”的引用 /home/yotam/Development/C/devpkg/shell.c:68:未定义对“apr_proc_create”的引用 /home/yotam/Development/C/devpkg/shell.c:71:未定义对“apr_proc_wait”的引用 commands.o:在函数“Command_fetch”中: /home/yotam/Development/C/devpkg/commands.c:44:未定义对“apr_uri_parse”的引用 /home/yotam/Development/C/devpkg/commands.c:48:未定义对“apr_fnmatch”的引用 /home/yotam/Development/C/devpkg/commands.c:51:未定义对“apr_fnmatch”的引用 /home/yotam/Development/C/devpkg/commands.c:70:未定义对“apr_fnmatch”的引用 /home/yotam/Development/C/devpkg/commands.c:78:未定义对“apr_dir_make_recursive”的引用 /home/yotam/Development/C/devpkg/commands.c:84:未定义对“apr_fnmatch”的引用 /home/yotam/Development/C/devpkg/commands.c:90:未定义对“apr_dir_make_recursive”的引用 collect2:错误:ld 返回 1 个退出状态 制作:*** [devpkg] 错误 1
这是我的makefile,它应该可以在不同的计算机上编译,其中PREFIX变量是相对于计算机的位置。
(这个程序本质上应该有朝一日可以移植到任何操作系统。现在我只想能够成功编译它)
PREFIX?=/usr/local
LDFLAGS= -L${PREFIX}/apr/lib -L .aprutil-1 -L .apr-1
CFLAGS=-g -Wall -pthread -I${PREFIX}/apr/include/apr-1 -I${PREFIX}/apr/include/apr-util-1
全部:devpkg
devpkg:bstrlib.o db.o shell.o commands.o
安装:全部\
安装 -d $(DESTDIR)/$(PREFIX)/bin/ \
安装 devpkg $(DESTDIR)/$(PREFIX)/bin/
干净的:
rm -f *.o \
rm -f 开发包\
rm -rf *.dSYM
我自己在文件夹中搜索了它,这就是我得到的:
yotam@yotam-HP-ProBook-450://usr$ grep -r apr_pool_initialize 。 ./local/apr/include/apr-1/apr_pools.h:APR_DECLARE(apr_status_t) apr_pool_initialize(void); 二进制文件 ./local/apr/lib/libapr-1.so.0.4.6 匹配 二进制文件 ./local/apr/lib/libapr-1.a 匹配 二进制文件 ./local/apr/lib/libapr-1.so.0.5.1 匹配 二进制文件 ./local/apr/lib/libapr-1.so.0.4.5 匹配 ./local/apr/lib/apr.exp:apr_pool_initialize经过我的研究,我清楚地明白这是一个链接器问题。但我找不到执行此操作的命令。
提前致谢。
【问题讨论】:
标签: c linux shell makefile apr