未定义的引用和链接库

时间:2014-10-17 07:04:27

标签: c

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

libmatrix.so: $(LIB).o
    $(CC) $(CFLAGS) -fPIC -shared -o $@ $< $(LDFLAGS)

main: main.o libmatrix.so
    $(CC) $(CFLAGS) -o $@ $< -L -lmatrix

任何人都可以指引我到可能出错的地方吗?非常感谢提前。

1 个答案:

答案 0 :(得分:4)

您可能希望在最后一行中-L.而不是-L,所以:

main: main.o libmatrix.so
    $(CC) $(CFLAGS) -o $@ $< -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)