我正在尝试使用gcc在ubuntu上创建一个共享库
我只有一个简单的类(shared.h和shared.cpp)和一个使用它的客户端(main.cpp)
这是我的makefile,我仍然无法让程序编译。
all:
#compile object(fPIC: creates position independent code)
gcc -fPIC -Wall -g -c shared.cpp
#compile shared library
gcc -shared -Wl,-soname,libshared.so.1 -o libshared.so.1.0.1 shared.o -lc
#link shared library
gcc -g -o main main.cpp -L. -lshared
我不想安装库,我只是希望能够从当前目录链接它。我试过了:export LD_LIBRARY_PATH=.
但它似乎没有什么区别。一切都在当前目录中。
错误:/ usr / bin / ld:找不到-lshared
如何让编译器检查我的库的当前目录?
答案 0 :(得分:4)
问题不在于它没有查看目录,问题是您已将库命名为“libshared.so.1.0.1”。当您使用-lshared时,它正在库搜索路径中查找名为“libshared.so”或“libshared.a”的文件。
大多数情况下,使用版本化系统库时,即使安装了“libshared.so.1”或“libshared.so.1.0”,也会提供最新版本的“libshared.so”链接。 2.1' 。
在您的情况下,如果您继续保留名为“libshared.so.1.0.1”的文件,则需要创建2个符号链接:
答案 1 :(得分:0)
您不会编写任何依赖项,这是Makefile
- s的目的。你可能需要强制run path或许类似
.PHONY: all clean
CXX=g++
CXXFLAGS=-g -Wall
all: main
main: main.o libshared.so
$(LINK.cpp) -o $@ $< -Wl,-rpath,. -L. -lshared
libshared.so: shared.pic.o
$(LINK.cpp) -shared -o $^ $<
main.o: main.cc shared.hh
%.pic.o: %.cc
$(CXX) $(CXXFLAGS) -fPIC -c -o $@ $<
#
clean:
rm -f *.o *.so main *~