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