未定义的引用和链接库
问题描述:
我遇到了一些与我的动态库有关的编译问题。它应该链接到main.c,但是对于所有对它的引用,我都会收到“对function_name的未定义引用”。未定义的引用和链接库
main.c的内容并不那么重要;我包括我的库:
#include "matrix.h"
然后,我有一个简单的Makefile链接两个。
#Variables
LIB = matrix
# Usual compilation flags
CFLAGS = -std=c99 -Wall -Wextra -g
CPPFLAGS = -I../include -DDEBUG
LDFLAGS = -lm
# Special rules and targets
.PHONY: all clean help
all: $(LIB).o libmatrix.so main
$(LIB).o: $(LIB).c $(LIB).h
$(CC) $(CFLAGS) $(CPPFLAGS) -fPIC -c -o [email protected] $<
libmatrix.so: $(LIB).o
$(CC) $(CFLAGS) -fPIC -shared -o [email protected] $< $(LDFLAGS)
main: main.o libmatrix.so
$(CC) $(CFLAGS) -o [email protected] $< -L -lmatrix
任何人都可以指导我到哪里我可能会出错吗?提前谢谢了。
答
你可能想-L.
不-L
在你的上线,所以:
main: main.o libmatrix.so
$(CC) $(CFLAGS) -o [email protected] $< -L. -lmatrix
你应该阅读Program Library HOWTO和Drepper's paper: How to Write Shared Libraries;您可能需要设置在链接时一定-rpath
(可能使用-Wl,-rpath,.
...),你可能会想-rdynamic
....
或者链接,设置您的LD_LIBRARY_PATH
环境变量包含.
(我不推荐),或者在/usr/local/lib/
中安装共享库(并将其添加到/etc/ld.so.conf
,然后运行ldconfig
)。另请参阅dlopen(3),environ(7),ld.so(8), ldconfig(8)
+0
这不是以前的工作,但现在不知何故。无论如何,我现在有一个错误“./main:加载共享库时出错:libmatrix.so无法打开共享对象文件:没有这样的文件或目录” – 2014-10-17 07:16:55
请发布编译错误结果。 – MajorBetaVictory 2014-10-17 07:07:21
...包括'make'运行发出的实际命令(应该回显给终端)。 – WhozCraig 2014-10-17 07:08:20