Can I build a C++ MEX file using Xcode 5 on Mac OS X 10.9?

2 次查看(过去 30 天)
I would like to be able to build MEX files using the Xcode 5 IDE on OS X 10.9 (Mavericks) with Matlab 2013b.
I saw this related question involving what was presumably Xcode 4 on an earlier version of OS X and Matlab, but some of the steps seem different or not applicable.
I initially attempted to build the built-in mexcpp.cpp file using Xcode (on my computer, mexcpp.cpp is /Applications/MATLAB_R2013b.app/extern/examples/mex/mexcpp.cpp). Here's what I did:
  • Create a new Xcode project (OS X -> Application -> Command Line Tool)
  • Call it "mex xcode test", type C++
  • Rename main.cpp to mexcpp.cpp
  • Copy contents of matlab's mexcpp.cpp to my mexcpp.cpp
  • Under Target -> Build Settings, add the following User Header Search Paths:
  1. /Applications/MATLAB_R2013b.app/extern/include (non-recursive)
  • Under Target -> Build Settings, add the following Library Search Paths:
  1. /Applications/MATLAB_R2013b.app/sys/os/maci64 (non-recursive)
  2. /Applications/MATLAB_R2013b.app/bin/maci64 (recursive)
  • Under Target -> Build Settings, set "Always Search User Paths" to Yes
  • Build via Product -> Build
Ignoring the "missing main.cpp" warning, I get the following linker errors:
Undefined symbols for architecture x86_64:
"_main", referenced from:
implicit entry/start for main executable
"_mexErrMsgIdAndTxt", referenced from:
_mexFunction in mexcpp.o
"_mxGetPr", referenced from:
_mexFunction in mexcpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
  • Under Target -> Build Settings, add preprocessor macro MATLAB_MEX_FILE to both Debug and Release phases
This made no difference.
I thought of trying a few things from the answer to this related question from 2011
  • Under Target -> Build Phases -> Link Binary with Libraries, I added several explicit libraries (but shouldn't these be found automatically based on my library search path?):
  1. /Applications/MATLAB_R2013b.app/bin/maci64/libeng.dylib
  2. /Applications/MATLAB_R2013b.app/bin/maci64/libmx.dylib
This solved my linker problem to mxGetPr, so my linker error message is now shorter:
Undefined symbols for architecture x86_64:
"_main", referenced from:
implicit entry/start for main executable
"_mexErrMsgIdAndTxt", referenced from:
_mexFunction in mexcpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Is the solution then to somehow figure out which explicit library files I need for every C++ function that I write? This seems unsustainable, since there are over 500 library files in the /Applications/MATLAB_R2013b.app/bin/maci64 folder. Or am I missing a step in telling Xcode where to find the library files?
And will adding the right library files solve my error involving the _main symbol? Or do I need to somehow tell Xcode to build a library instead of an executable?
What steps am I missing?
Thank you!
  1 个评论
David
David 2014-4-1
Hi, did you ever solve this problem? I am having the same issues right now. Also, in Xcode 5.1 you can't type in the explicit path to libraries like you did above.

请先登录,再进行评论。

回答(1 个)

Bernard
Bernard 2014-4-29
Hi
I could make it work by setting Mach-O Type to Bundle (in Linking). Also, I used "-lmx -lmex -lmat" in Other Linker Flags to specify the libraries.

类别

Help CenterFile Exchange 中查找有关 Call C++ from MATLAB 的更多信息

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by