Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.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
如何使用mysql连接器创建共享对象库(*.so)?_Mysql_C_Gcc_Compilation_Shared Libraries - Fatal编程技术网

如何使用mysql连接器创建共享对象库(*.so)?

如何使用mysql连接器创建共享对象库(*.so)?,mysql,c,gcc,compilation,shared-libraries,Mysql,C,Gcc,Compilation,Shared Libraries,我已经用C编写了一个非常简单的应用程序,我希望能与MySQL数据库建立连接。代码如下: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <mysql.h> #include <my_global.h> void runtime_tile_opt(void); int main(void) { runtime_tile_opt();

我已经用C编写了一个非常简单的应用程序,我希望能与MySQL数据库建立连接。代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <mysql.h>
#include <my_global.h>

void runtime_tile_opt(void); 


int main(void) {
    runtime_tile_opt();
    return 0;
}


void runtime_tile_opt() {
    printf("MySQL client version: %s\n", mysql_get_client_info());

}
但是,我想用它创建一个共享库。所以我尝试创建一个对象文件,带有
-fPIC
标志:

gcc -c -fPIC runtime.c $(mysql_config --cflags) -o runtime.o $(mysql_config --libs)
mysql\u config--libs
mysql\u config--cflags
的输出为:

-L/usr/lib/x86_64-linux-gnu -lmysqlclient -lpthread -lz -lm -ldl
-I/usr/include/mysql -DBIG_JOINS=1  -fno-strict-aliasing    -g -DNDEBUG
最后,我创建了我的
。因此

gcc runtime.o -shared -o runtime.so
所有这些都没有任何错误。但是,某些库显然没有链接,因为当我运行加载了此插件的文件时,我得到:

/home/michal/thesis/Drafts/runtime/runtime.so: undefined reference to `mysql_get_client_info'

这个函数在我包含的头文件中定义。我对gcc不是很有经验,但我看着它,它看起来好像我链接了我必须链接的东西。知道我在哪里失败了吗?

在创建共享库时,仍然需要将正确的
-l
标志传递给编译器。它们应该与创建二进制文件时传递的标志相同,即

gcc -shared -o runtime.so $(mysql_config --cflags) runtime.o $(mysql_config --libs)

请注意,选项的顺序很重要!首先传递所有选项,然后传递所有文件,最后传递库(
-l..
操作数)。

太棒了,这正是缺少的。谢谢你,先生!
gcc -shared -o runtime.so $(mysql_config --cflags) runtime.o $(mysql_config --libs)