把源码编译打包为动态库so文件,做平台的可能对这些不熟悉。 对我们这些算是经常用到的。 总结个模板,一看就懂的那种,提供给有需要的人。 前提条件,机器上有 gcc工具链。 如果文件个数少,可以直接单个编译,如下: Building shared lib... g++ -c -fPIC Quote.cpp -o Quote.o g++ -c -fPIC QuoteExport.cpp...
具体来说:在Windows系统中,当编译动态库的时候,打开(定义)宏MYLIB_EXPORT,下面这个宏生效: #define MYLIB_API __declspec(dllexport) 这样的话,两个函数my_add和my_sub的符号才可能被导出到 mylib.lib 文件中。 当这个动态库被应用程序(myapp)使用的时候,myapp.c在 includemylib.h的时,关闭宏MYLIB_EXPORT,...
// myapp/CMakeLists.txt 文件CMAKE_MINIMUM_REQUIRED(VERSION3.5)PROJECT(myappVERSION1.0.0)# 头文件路径INCLUDE_DIRECTORIES(./include)# 库文件路径LINK_DIRECTORIES(./lib)# 源文件FILE(GLOBMYAPP_SRCS"*.c")# 编译目标ADD_EXECUTABLE(${PROJECT_NAME}${MYAPP_SRCS})# 依赖的动态库TARGET_LINK_LIBRARIES(...
然后创建mymethod.conf 用vi打开mymethod.conf,添加动态库的绝对路径 /home/secondtonone/soando 1. 最后运行ldconfig, 即可生效了。 这样就可以运行./main 现在对动态库路径配置做一个总结 解决共享库路径问题 gcc/g++ 编译期 : ● 使用 L 选项指定所需链接的共享库所在目录(如果共享库或其连 接文件位于 ...
-c : 表示只编译(compile),而不连接。 -fPIC : 注意-fPIC选项。PIC指Position Independent Code。共享库要求有此选项,以便实现动态连接(dynamic linking)。 -o target.o source.c :用于说明输出(output)文件名。gcc将生成一个目标(object)文件 mystack.o。
惯,静态库名字跟动态库名字应该是一致的,只不过后缀是.a 罢了。 下面我们用这个指令再来添加静态库: add_library(mymath STATIC mymath.cc) 然后再在 build 目录进行外部编译,我们会发现,静态库根本没有被构建,仍然只生成了 一个动态库。因为mymath 作为一个 target 是不能重名的,所以,静态库构建指令无效。
-rpath: “运行” 的时候,去找的目录。运行的时候,要找 .so 文件,会从这个选项里指定的地方去找。对于交叉编译,交叉编译链接器需已经配置 --with-sysroot 选项才能起作用。也就是说,-rpath 指定的路径会被记录在生成的可执行程序中,用于运行时查找需要加载的动态库。-rpath-link 则只用于链接时查找。
一、动态编译与静态编译 动态编译使用的是动态库文件进行编译,默认使用的是动态编译方法。 登录后复制gcc hello.c -o hello 静态编译使用的是静态库文件进行的编译 登录后复制gcc -static hello.c -o hello 静态编译要把静态库文件打包编译到可执行程序中,动态编译不会把动态库文件打包编译到可执行程序中,它们只是...
3、编译 gcc -c -fPIC -o mystack.o mystack.c [-I] 说明: -c : 表示只编译(compile),而不连接。 -fPIC : 注意-fPIC选项。PIC指Position Independent Code。共享库要求有此选项,以便实现动态连接(dynamic linking)。 -o target.o source.c :用于说明输出(output)文件名。gcc将生成一个目标(object)文...