2014-10-17 110 views
0

我遇到了一些与我的动态库有关的编译问题。它应该链接到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 

任何人都可以指导我到哪里我可能会出错吗?提前谢谢了。

+0

请发布编译错误结果。 – MajorBetaVictory 2014-10-17 07:07:21

+2

...包括'make'运行发出的实际命令(应该回显给终端)。 – WhozCraig 2014-10-17 07:08:20

回答

4

你可能想-L.-L在你的上线,所以:

main: main.o libmatrix.so 
    $(CC) $(CFLAGS) -o [email protected] $< -L. -lmatrix 

你应该阅读Program Library HOWTODrepper'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