-bash-3.00$ g++ -g -I. -I/export/home/oracle/app/product/10.2.0.1/rdbms/public -L/export/home/oracle/app/product/10.2.0.1/lib32 -lclntsh -o otl otlexamp.cpp -lsocket -lnsl -lresolv
未定义 文件中的
符号 在文件中
insertBatch() /var/tmp//ccZqVtC0.o
updateNoAutoCommit() /var/tmp//ccZqVtC0.o
insertConstant() /var/tmp//ccZqVtC0.o
insertNoAutoCommit() /var/tmp//ccZqVtC0.o
ld: 致命的: 符号参照错误. 没有输出被写入otl
collect2: ld returned 1 exit status
还需要加哪些链接吗?高手指点迷津。
该回答引用ChatGPT
这个错误表明编译器无法找到定义 insertBatch()、updateNoAutoCommit()、insertConstant() 和 insertNoAutoCommit() 函数的符号,因此链接器无法生成可执行文件。
可能的原因是链接器无法找到这些函数的定义或缺少链接到正确的库。您已经链接了 Oracle 数据库客户端库 libclntsh.so,但可能还需要链接其他库。
您可以尝试使用命令 ldd otlexamp 来查看 otlexamp 可执行文件使用的动态链接库,看是否缺少某些库。您还可以尝试将链接器日志级别设置为详细,以了解链接器搜索符号时使用的库。
例如,您可以尝试在编译器命令中添加 -Wl,-verbose 选项,以设置链接器日志级别为详细,以便查看它搜索库的顺序。例如:
g++ -g -I. -I/export/home/oracle/app/product/10.2.0.1/rdbms/public -L/export/home/oracle/app/product/10.2.0.1/lib32 -lclntsh -o otl otlexamp.cpp -lsocket -lnsl -lresolv -Wl,-verbose
根据链接器日志,您可以看到链接器正在搜索哪些库并查找缺失的库。您可能需要添加其他库路径和库名来解决缺少符号的问题。