具有库和意外文件类型的Xcode链接二进制文件

时间:2019-03-30 15:57:47

标签: c++ xcode compiler-errors dylib instantclient

我想将Oracle instantclient 库用于C ++。我使用Xcode作为IDE。我通过项目>构建阶段>库的链接二进制文件添加了 occi 库。编译时出现以下警告和错误。

  

警告:跳过文件'/Users/user/Library/Oracle/instantclient_12_2/libocci.dylib.12.1'(在Frameworks&Libraries构建阶段,意外的文件类型为'text.man')

     

错误:体系结构x86_64的未定义符号:“ oracle :: occi :: Environment :: createEnvironment(oracle :: occi :: Environment :: Mode,void *,void *()(void ,unsigned long),void *()(void ,void *,unsigned long),void()(void ,void *))“,引用自:         _main in main.o

当然,该错误是由警告引起的。看来问题出在“ .dylib”之后文件末尾的版本号(.12.1)(对于同一个文件夹中名称没有该名称的其他库,我没有问题文件扩展名后的版本号)。

即时客户端库可以下载here。您会看到下载的文件夹将包含文件 libocci.dylib libocci.dylib.12.1 。第一个是第二个的链接:

ls -l *occi*
lrwxr-xr-x@ 1 user  wheel       18 Mar 23 14:01 libocci.dylib -> libocci.dylib.12.1
-rwxr-xr-x@ 1 user  wheel  1465312 Jan  9  2018 libocci.dylib.12.1

我尝试了两个文件,Xcode会自动使用 libocci.dylib.12.1

问题:

  • 为什么在.dylib扩展名之后设置版本号?
  • 为什么编译器无法识别文件类型?
  • 如何使编译器识别文件类型?

1 个答案:

答案 0 :(得分:0)

我必须在product> scheme> edit方案中将DYLD_LIBRARY_PATH添加到env vars。

还要在构建设置中将-locci和-lclntsh添加到“其他链接器标志”。