c++ - .So 文件 Linux

标签 c++ shared-libraries dynamic-library

我有一个像这样的 C++ .so 文件结构:(动态库)

Folder 1 (.d and .o extention files)
Folder 2 (.d and .o extention files)
Folder 3 (.d and .o extention files)
processsignal.so
makefile
objects
sources...

你们知道如何编译和运行上面的文件吗,我试过编译.so,也运行了makefile,但是仍然报错:

make:
make: Nothing to be done for `Cartographie/ProcessingFit.d'.

通过 G++ 编译:

g++ libsignalProcessing.so 
/usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: ld returned 1 exit status

最佳答案

如果你想在你的程序中使用.so文件,你需要使用gcc编译器的-l标志。在此之前,您需要将 LD_LIBRARY_PATH 设置为 .so 的位置

例如,如果您在/home/code 目录中有 libsomelib.so,则将 LD_LIBRARY_PATH 设置为 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/code 然后 export LD_LIBRARY_PATH . 使用 echo $LD_LIBRARY_PATH 对其进行测试。它应该给出图书馆的位置。

然后在你希望使用这个.so的程序中,做 g++ -L ../code abc.cpp -lsomelib

我不确定您的生产代码,但一般来说,如果您的程序用作库,那么它可能没有作为 main 函数的入口点。

关于c++ - .So 文件 Linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16832382/

相关文章:

c++ - 对数组的引用,没有按预期工作

c++ - 使用 dlopen 加载库时具有静态存储行为的动态变量

linux - .so 和 .lo 文件有什么区别?

java.lang.UnsatisfiedLinkError chilkat 库

c++ - 静态对象未在 Mac OS X 上初始化

c++ - 为什么我在编译 DLL 项目时收到错误 LNK1561 "Entry point must be defined"?

c++ - 空时访问索引0处的 vector

c++ - argv[] 分配了多少内存?

c++ - 对 "conclusionaryOutput(number1, number2, isASquare1, isASquare2)"的调用引发错误,我不确定为什么

c++ - Graphviz 作为 Windows 中的库