Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C .so文件是否更改了任何类型?_C_Linux_Shared Libraries - Fatal编程技术网

C .so文件是否更改了任何类型?

C .so文件是否更改了任何类型?,c,linux,shared-libraries,C,Linux,Shared Libraries,我在自己的代码foo.c中使用pmemobj_create from。它接受参数PMEMobjpool*pmemobjcreateconst char*path、const char*layout、size\t poolsize、mode\u t mode。当将foo.c直接编译为foo.o,而不是将foo.o与test.o链接时,一切正常。 我使用了以下编译命令 gcc -c foo.c -o foo.o gcc test.o foo.o -o test 但是当我将foo.c编译为libfo

我在自己的代码foo.c中使用pmemobj_create from。它接受参数PMEMobjpool*pmemobjcreateconst char*path、const char*layout、size\t poolsize、mode\u t mode。当将foo.c直接编译为foo.o,而不是将foo.o与test.o链接时,一切正常。 我使用了以下编译命令

gcc -c foo.c -o foo.o
gcc test.o foo.o -o test
但是当我将foo.c编译为libfoo.so时,首先使用

gcc -c -fPIC foo.c -o foo.o
gcc -shared -o libfoo.so foo.o
然后将其与test.o链接, 编译成功,但在执行时,函数pmemobj_create的执行失败,错误表明参数无效。我的假设是编译foo.c的方式可能是错误的,这会导致我传递到pmemobj_create的参数无效。但是我怎样才能修复它呢?谢谢你的建议

.so文件是否更改了任何类型

如果您想到MIME类型,请不要。请与联系。但是在编译的C++代码中,类型信息被编码,并且一些C可调用库在C++中被编码。因此,使用extern C作为插件中的公共函数名,如中所建议的

共享库或*.so文件不包含大量类型信息。阅读有关格式的信息。在链接时,数据和代码之间只有区别,命名函数和数据都有名称、对齐方式、字节大小,除了数据、函数和它们的段之外,没有更多的类型信息。核对

在Linux上:阅读并编译你的插件gcc-Wall-Wextra-g-fPIC-O1 foo.c-shared-o libfoo.so

也许您还应该将-lpmemobj附加到上面的gcc命令中

学习使用调试器。您的主程序需要编译为gcc-Wall-Wextra-g,然后将-rdynamic-ldl传递给gcc

不仅要使用,还要使用,以了解运行时发生的情况


阅读更多关于,.

当直接编译foo.c时,您可以显示该命令吗?然后将其与test链接。o您能显示该命令吗?请在您的问题中提供一些,以便对其进行改进。显示更多的C源代码,以及所有编译和链接命令。你的问题不清楚