GCC共享库问题
GCC Shared Library Problems
我正在尝试在ubuntu上使用gcc创建一个共享库
我只有一个简单的类(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
- 我确信第一行是正确的
- 我不确定"-lc"的作用。我想它传递了一些东西给链接器?
我不想安装库,我只是希望能够从当前目录链接它。我试过了:
export LD_LIBRARY_PATH=.
但这似乎并没有什么不同。所有文件都在当前目录错误:/usr/bin/ld: cannot find -lshared
我如何让编译器检查我的库的当前目录?
问题不在于它没有在目录中查找,问题是您将库命名为"libshare .so.1.0.1"。当您使用-lshared时,它会查找名为"libshared"的文件。所以' or 'libshared。
大多数时候,当使用版本化的系统库时,你会提供一个链接到最新的libshared。所以,即使你已经安装了libshared.so。1'或'libshare .so.1.0.1'。
在您的示例中,如果您继续保留名为'libshare .so.1.0.1'的文件,则需要创建2个符号链接:
- libshared。so -这样可以使用ld 找到库
- libshared.so。1 -既然你声明了SO名称为libshared.so。1 .在构建时,需要提供这个链接,否则,可执行文件将无法在运行时找到合适的共享库。
您不编写任何依赖项,这是Makefile
-s的目的。你可能需要强制运行路径比如
.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 *~
相关文章:
- 在 Android Studio 中使用 C++ 共享对象时出现问题
- 图问题:找出两个节点是否在每个节点的O(1)时间和O(2)存储中共享同一分支
- 在多线程函数中返回共享的常量指针会导致计时问题吗?
- 与 32 位共享对象的链接问题
- 提升线程问题,当一个线程与另一个线程没有相同的副本时如何共享变量?
- 共享库中 __attribute__((构造函数)) 的全局/静态变量初始化问题
- 在共享文件夹上恢复有效权利的问题
- 如何解决删除其他人之间共享的对象的问题
- 使用boost进程间库的phpexec共享内存和Cloudfoundry容器问题
- 使用命名共享内存的C++问题
- C++11 中 3 个线程和 2 个共享资源的同步问题
- JNI与共享对象有问题
- 在C++项目中使用共享库的问题
- 使用共享库编译问题
- 在linux上将boost静态链接到共享对象时出现问题
- C++:运行时将共享对象与主机应用程序链接,符号表问题
- 使用提升时出现问题,无法打开共享对象文件
- 仅检查共享库(例如 Apache 模块)中的内存问题
- 尝试安装和使用 LAPACK++,加载共享库时出现问题
- 具有共享QGLWidgets的线程OpenGL与Qt 5.1的问题