"没有发现建筑x86_64的&QUOT符号;对于使用在C CPLEX API一个MEX文件 [英] "Symbols not found for Architecture x86_64" for a MEX file that uses the CPLEX API in C

查看:547
本文介绍了"没有发现建筑x86_64的&QUOT符号;对于使用在C CPLEX API一个MEX文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前正在写在MATLAB中使用C中的CPLEX API来解决线性规划问题的MEX文件。不幸的是,我碰到一个符号(S)没有发现建筑x86_64的问题时,我试图编译我不知道如何解决它的主意。

一些基本信息:


  • 我可以编译 yprime.c 和不使用CPLEX API其他MEX文件

  • 我使用的是Mac OSX 10.7.2 MATLAB 2011B

  • 我使用包含以x code 4.2海合会4.2包。

  • 我已经申请了 X $ C $ 4.2Ç修补MATLAB

我将不胜AP preciate任何意见的人可能有。我下面包括一个详细的错误报告。

   - >从目录mexopts.sh源(DIR = $preF_DIR)
   FILE = /Users/berk/.matlab/R2011b/mexopts.sh
-------------------------------------------------- --------------
- > MATLAB = /Applications/MATLAB_R2011b.app
- > CC = LLVM-GCC-4.2
- > CC标志:
         CFLAGS = -fno常见-no-cpp- preCOMP -arch x86_64的-isysroot /Developer/SDKs/MacOSX10.6.sdk -mmacosx版本分钟= 10.5 -fexceptions -Wall
         CDEBUGFLAGS = -g
         COPTIMFLAGS = -O2 -DNDEBUG
         CLIBS = -L /应用/ MATLAB_R2011b.app /斌/ maci64 -lmx -lmex -lmat -lstdc ++
         参数= -DMX_COMPAT_32
- > CXX = LLVM-G ++ - 4.2
- > CXX标志:
         CXXFLAGS = -fno常见-no-cpp- preCOMP -fexceptions -arch x86_64的-isysroot /Developer/SDKs/MacOSX10.6.sdk -mmacosx版本分钟= 10.5
         CXXDEBUGFLAGS = -g
         CXXOPTIMFLAGS = -O2 -DNDEBUG
         CXXLIBS = -L /应用/ MATLAB_R2011b.app /斌/ maci64 -lmx -lmex -lmat -lstdc ++
         参数= -DMX_COMPAT_32
- > FC = gfortran
- > FC标志:
         FFLAGS = -fexceptions -m64 -fbackslash
         FDEBUGFLAGS = -g
         FOPTIMFLAGS = -O
         FLIBS = -L /应用/ MATLAB_R2011b.app /斌/ maci64 -lmx -lmex -lmat -L -lgfortran -L -lgfortranbegin
         参数= -DMX_COMPAT_32
- > LD = LLVM-GCC-4.2
- >链接标志:
         LDFLAGS =轮候册,-twolevel_namespace -undefined错误-arch x86_64的轮候册,-syslibroot,/开发商/软件开发工具包/ MacOSX10.6.sdk -mmacosx版本分钟= 10.5 -bundle轮候册,-exported_symbols_list,/应用/ MATLAB_R2011b。应用程序/的extern / lib中/ maci64 / mexFunction.map
         LDDEBUGFLAGS = -g
         LDOPTIMFLAGS = -O
         LDEXTENSION = .mexmaci64
         参数=
- > LDCXX =
- >链接标志:
         LDCXXFLAGS =
         LDCXXDEBUGFLAGS =
         LDCXXOPTIMFLAGS =
         LDCXXEXTENSION =
         参数=
-------------------------------------------------- -------------- - > LLVM-GCC-4.2 -c -I /用户/伯克/应用/ IBM / ILOG / CPLEX_Studio_Academic123 / CPLEX /有/ ilcplex / -I /应用/ MATLAB_R2011b.app /的extern /包括-I /应用/ MATLAB_R2011b.app / SIMULINK /包括-DMATLAB_MEX_FILE -fno常见-no-cpp- preCOMP -arch x86_64的-isysroot /Developer/SDKs/MacOSX10.6.sdk -mmacosx版本分钟= 10.5 -fexceptions -Wall -DMX_COMPAT_32 -O2 -DNDEBUG addcutsmx.caddcutsmx.c:488:4:警告:​​/ *注释中
addcutsmx.c:37:警告:free_and_null声明静态,但从来没有定义
addcutsmx.c:38:警告:使用声明静态,但从来没有定义
- > LLVM-GCC-4.2 -O轮候册,-twolevel_namespace -undefined错误-arch x86_64的轮候册,-syslibroot,/开发商/软件开发工具包/ MacOSX10.6.sdk -mmacosx版本分钟= 10.5 -bundle轮候册,-exported_symbols_list, /Applications/MATLAB_R2011b.app/extern/lib/maci64/mexFunction.map -oaddcutsmx.mexmaci64addcutsmx.o -L /应用/ MATLAB_R2011b.app /斌/ maci64 -lmx -lmex -lmat -lstdc ++适用于建筑x86_64的未定义符号:
  _CPXLopenCPLEX,从引用:
      _mexFunction在addcutsmx.o
  _CPXLcreateprob,从引用:
      _mexFunction在addcutsmx.o
  _CPXLchgobjsen,从引用:
      _mexFunction在addcutsmx.o
  _CPXLnewcols,从引用:
      _mexFunction在addcutsmx.o
  _CPXLaddrows,从引用:
      _mexFunction在addcutsmx.o
  _CPXLlpopt,从引用:
      _mexFunction在addcutsmx.o
  _CPXLsolution,从引用:
      _mexFunction在addcutsmx.o
  _CPXLgetbase,从引用:
      _mexFunction在addcutsmx.o
LD:符号(S)未找到x86_64的架构
collect2:劳工处返回1退出状态      MEX:中'addcutsmx.mexmaci64链接失败。使用MEX错误(行206)
无法成功完成。


解决方案

您似乎缺少 -lcplex 或你的系统上CPLEX相关联的指令。

用户手册上说的正确包括和连接参数在你CPLEX分布readme.html文件,样本项目和makefile文件一起。

使用CPLEX用Matlab 该说你必须指定完整库链接路径和包含路径。根据你在做什么,你可能还需要指定 -lilocplex 来MEX。

例如。 MEX -I / cplex_include_fullpath -L / cplex_library_fullpath -lcplex file.c中

I'm currently writing a MEX file in MATLAB that uses the CPLEX API in C to solve linear programming problems. Unfortunately, I run into a "symbol(s) not found for architecture x86_64" problem when I attempt to compile and I have no idea of how to solve it.

Some basic information:

  • I can compile yprime.c and other MEX files that do not use the CPLEX API
  • I am using MATLAB 2011b on Mac OSX 10.7.2
  • I am using the GCC 4.2 package included in XCode 4.2.
  • I already applied the XCode 4.2 Patch for MATLAB

I would greatly appreciate any advice people may have. I'm including a verbose error report below.

-> mexopts.sh sourced from directory (DIR = $PREF_DIR)
   FILE = /Users/berk/.matlab/R2011b/mexopts.sh
----------------------------------------------------------------
->    MATLAB                = /Applications/MATLAB_R2011b.app
->    CC                    = llvm-gcc-4.2
->    CC flags:
         CFLAGS             = -fno-common -no-cpp-precomp -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.6.sdk -mmacosx-version-min=10.5  -fexceptions -Wall
         CDEBUGFLAGS        = -g
         COPTIMFLAGS        = -O2 -DNDEBUG
         CLIBS              = -L/Applications/MATLAB_R2011b.app/bin/maci64 -lmx -lmex -lmat -lstdc++
         arguments          =  -DMX_COMPAT_32
->    CXX                   = llvm-g++-4.2
->    CXX flags:
         CXXFLAGS           = -fno-common -no-cpp-precomp -fexceptions -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.6.sdk -mmacosx-version-min=10.5
         CXXDEBUGFLAGS      = -g
         CXXOPTIMFLAGS      = -O2 -DNDEBUG
         CXXLIBS            = -L/Applications/MATLAB_R2011b.app/bin/maci64 -lmx -lmex -lmat -lstdc++
         arguments          =  -DMX_COMPAT_32
->    FC                    = gfortran
->    FC flags:
         FFLAGS             = -fexceptions -m64 -fbackslash
         FDEBUGFLAGS        = -g
         FOPTIMFLAGS        = -O
         FLIBS              = -L/Applications/MATLAB_R2011b.app/bin/maci64 -lmx -lmex -lmat -L -lgfortran -L -lgfortranbegin
         arguments          =  -DMX_COMPAT_32
->    LD                    = llvm-gcc-4.2
->    Link flags:
         LDFLAGS            = -Wl,-twolevel_namespace -undefined error -arch x86_64 -Wl,-syslibroot,/Developer/SDKs/MacOSX10.6.sdk -mmacosx-version-min=10.5 -bundle -Wl,-exported_symbols_list,/Applications/MATLAB_R2011b.app/extern/lib/maci64/mexFunction.map
         LDDEBUGFLAGS       = -g
         LDOPTIMFLAGS       = -O
         LDEXTENSION        = .mexmaci64
         arguments          = 
->    LDCXX                 = 
->    Link flags:
         LDCXXFLAGS         = 
         LDCXXDEBUGFLAGS    = 
         LDCXXOPTIMFLAGS    = 
         LDCXXEXTENSION     = 
         arguments          = 
----------------------------------------------------------------

-> llvm-gcc-4.2 -c  -I/Users/berk/Applications/IBM/ILOG/CPLEX_Studio_Academic123/cplex/include/ilcplex/ -I/Applications/MATLAB_R2011b.app/extern/include -I/Applications/MATLAB_R2011b.app/simulink/include -DMATLAB_MEX_FILE -fno-common -no-cpp-precomp -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.6.sdk -mmacosx-version-min=10.5  -fexceptions -Wall  -DMX_COMPAT_32 -O2 -DNDEBUG  "addcutsmx.c"

addcutsmx.c:488:4: warning: "/*" within comment
addcutsmx.c:37: warning: 'free_and_null' declared 'static' but never defined
addcutsmx.c:38: warning: 'usage' declared 'static' but never defined
-> llvm-gcc-4.2 -O -Wl,-twolevel_namespace -undefined error -arch x86_64 -Wl,-syslibroot,/Developer/SDKs/MacOSX10.6.sdk -mmacosx-version-min=10.5 -bundle -Wl,-exported_symbols_list,/Applications/MATLAB_R2011b.app/extern/lib/maci64/mexFunction.map -o  "addcutsmx.mexmaci64"  addcutsmx.o  -L/Applications/MATLAB_R2011b.app/bin/maci64 -lmx -lmex -lmat -lstdc++

Undefined symbols for architecture x86_64:
  "_CPXLopenCPLEX", referenced from:
      _mexFunction in addcutsmx.o
  "_CPXLcreateprob", referenced from:
      _mexFunction in addcutsmx.o
  "_CPXLchgobjsen", referenced from:
      _mexFunction in addcutsmx.o
  "_CPXLnewcols", referenced from:
      _mexFunction in addcutsmx.o
  "_CPXLaddrows", referenced from:
      _mexFunction in addcutsmx.o
  "_CPXLlpopt", referenced from:
      _mexFunction in addcutsmx.o
  "_CPXLsolution", referenced from:
      _mexFunction in addcutsmx.o
  "_CPXLgetbase", referenced from:
      _mexFunction in addcutsmx.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

      mex: link of ' "addcutsmx.mexmaci64"' failed.

Error using mex (line 206)
Unable to complete successfully.

解决方案

You seem to be missing -lcplex or the relevant linking instruction for cplex on your system.

The User manual says the correct include and linking parameters are in readme.html of your cplex distribution, along with sample projects and makefiles.

From Using Cplex with Matlab it says you have specify the full library linking path and include path. Depending on what you are doing you may need to also specify -lilocplex to mex.

E.g. mex -I/cplex_include_fullpath -L/cplex_library_fullpath -lcplex file.c

这篇关于"没有发现建筑x86_64的&QUOT符号;对于使用在C CPLEX API一个MEX文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆