OCaml库,并生成名为a.out的可执行文件。没有任何东西告诉它在sql\u conn.o中查找,因此该文件被忽略

OCaml库,并生成名为a.out的可执行文件。没有任何东西告诉它在sql\u conn.o中查找,因此该文件被忽略,c,ocaml,C,Ocaml,在这里,您得到一个链接器错误,因为未找到print\u query(它是在sql\u conn.o中定义的)。如上所述,connect不会出现错误,因为系统库中已经存在该名称的符号(尽管带有不兼容的签名,但链接器不知道这一点)。为什么要使用g++编译C文件?为什么在禁用链接(-c)时指定链接器选项(-lmysqlclient)?这正是我在互联网上看到的。删除-c标志没有帮助。无论出于何种原因,mysql访问都需要链接器选项。不需要,-c标志,链接器选项被忽略。这引发了“分段错误(核心转储)”,我

在这里,您得到一个链接器错误,因为未找到
print\u query
(它是在
sql\u conn.o
中定义的)。如上所述,
connect
不会出现错误,因为系统库中已经存在该名称的符号(尽管带有不兼容的签名,但链接器不知道这一点)。

为什么要使用
g++
编译C文件?为什么在禁用链接(
-c
)时指定链接器选项(
-lmysqlclient
)?这正是我在互联网上看到的。删除-c标志没有帮助。无论出于何种原因,mysql访问都需要链接器选项。不需要,
-c
标志,链接器选项被忽略。这引发了“分段错误(核心转储)”,我尝试了执行“ocamlopt main.ml-cc”gcc sql\u conn.c-lmysqlclient“并且得到了相同的错误。@ZacharyBechhoefer您在这两个文件中都重命名了
connect
?我重命名了!它可能与我的打印或sprintf无关。@ZacharyBechhoefer,例如,您缺少来自的
CAMLparam
/
CAMLreturn
内容。@ZacharyBechhoefer我也很确定您不能将一个随机
MYSQL
句柄转换为
值。例如,请参见如何包装
窗口
ocamlopt sql_conn.c main.ml -cclib -lmysqlclient
 gcc -c sql_conn.c
 ocamlopt -c main.ml
 ocamlopt sql_conn.o main.cmx -cclib -lmysqlclient
g++ -c sql_conn.c -lmysqlclient
gcc -c sql_conn.c
ocamlopt main.ml