我试图将一个简单的函数编译成共享库对象(.so).该函数位于名为hello.hpp的文件中:
const char* greet(){
return "hello world";
}
Run Code Online (Sandbox Code Playgroud)
我用:
g++ -shared -fpic hello.hpp -o hello.so
Run Code Online (Sandbox Code Playgroud)
然后它创建一个大小为1.8 MB的hello.so文件.我发现大小不合理,我试图将源文件重命名为hello.cpp而不更改其内容.然后我再次编译:
g++ -shared -fpic hello.cpp -o hello.so
Run Code Online (Sandbox Code Playgroud)
这次,文件只有7 KB.为什么g ++的行为不同只是因为文件名不同?我的平台是Ubuntu 14.04和g ++ 4.8.2.
即使您指定输出应具有.so其扩展名,您也不会使用以下命令创建典型的目标文件.
g++从输入文件扩展名判断,将创建一个预编译的头.
g++ -shared -fpic hello.hpp -o hello.so
Run Code Online (Sandbox Code Playgroud)
如果你想告诉g++对待hello.hpp,如果它真的是一个CPP -file,您可以通过指定显式类型这样做-x.
g++ -shared -fpic -x c++ hello.hpp -o hello.so
Run Code Online (Sandbox Code Playgroud)