Linking armadillo with Xcode

青春壹個敷衍的年華 提交于 2019-11-30 18:20:22

问题


I have a large existing Xcode project and now I want to add the armadillo library to it .

http://arma.sourceforge.net/

I have downloaded it (with macports) and got it working using Cmake (just as a C++ terminal app). I am not using Cmake for my large project (iPad app) so I have tried to link the library. I looked in the xcode-project file that I got working with cmake and added the same to my project.

Added: header search path: /opt/local/include Library search path: /opt/local/lib Other linker flags: -larmadillo

I also added the libarmadillo.3.4.0.dylib to "link library with binaries"

    ld: warning: ld: warning: ignoring file /opt/local/lib/libarmadillo.3.4.0.dylib, file was built for unsupported file format ( 0xcf 0xfa 0xed 0xfe 0x 7 0x 0 0x 0 0x 1 0x 3 0x 0 0x 0 0x 0 0x 6 0x 0 0x 0 0x 0 ) which is not the architecture being linked (armv7s): /opt/local/lib/libarmadillo.3.4.0.dylibld: warning: ignoring file /opt/local/lib/libarmadillo.dylib, file was built for unsupported file format ( 0xcf 0xfa 0xed 0xfe 0x 7 0x 0 0x 0 0x 1 0x 3 0x 0 0x 0 0x 0 0x 6 0x 0 0x 0 0x 0 ) which is not the architecture being linked (armv7s): /opt/local/lib/libarmadillo.dylib
    ignoring file /opt/local/lib/libz.dylib, file was built for unsupported file format ( 0xcf 0xfa 0xed 0xfe 0x 7 0x 0 0x 0 0x 1 0x 3 0x 0 0x 0 0x 0 0x 6 0x 0 0x 0 0x 0 ) which is not the architecture being linked (armv7s): /opt/local/lib/libz.dylib

    Undefined symbols for architecture armv7s:
      "_deflateInit_", referenced from:
  _compress_data in libTestFlight.a(tf_compression.o)
      "_deflateEnd", referenced from:
  _compress_data in libTestFlight.a(tf_compression.o)
      "_deflate", referenced from:
  _compress_data in libTestFlight.a(tf_compression.o)
    ld: symbol(s) not found for architecture armv7s
    clang: error: linker command failed with exit code 1 (use -v to see invocation)

Any ideas how I can solve this?


回答1:


Try to add libz.lib to your build target:

Add libz to your Link Binary With Libraries Build Phase

  1. Select your Project in the Project Navigator
  2. Select the target you want to enable the SDK for
  3. Select the Build Phases tab
  4. Open the Link Binary With Libraries Phase
  5. Click the + to add a new library
  6. Find libz.dylib in the list and add it
  7. Repeat Steps 2 - 6 until all targets you want to use the SDK with have libz.dylib

Source: https://testflightapp.com/sdk/doc/1.1/




回答2:


I recently had a similar problem – Linking armadillo with Xcode.

I'll tell you how I fixed it. Two steps were necessary:

1) the xcode needs to "see" the file libarmadillo.dylib (mine, located at /usr/lib/) – it is Not the same as using libarmadillo.3.81.1.dylib directly.

In order to do that, create a link to the file on xcode libraries (mine, located at /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/usr/lib/).

In summary: $ sudo ln -s /usr/lib/libarmadillo.dylib /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/usr/lib/libarmadillo.dylib

2) now I needed to "tell" the xcode to include this library on compile command.

For that:

  1. open your project (make sure you do that after create the link mentioned above)
  2. go to the TARGETS (I have only one so...)
  3. click on Build Phases tab
  4. find 'Link Binary With Libraries' and click on + (Add items)
  5. on the new opened window type armadillo and by now you should be seeing the library libarmadillo.dylib in front of you, just add it!

P.S. Within the header files whose armadillo was used, I included it using the full path (in my case, #include "/usr/include/armadillo")

That is it, I wish I could have helped you out.



来源:https://stackoverflow.com/questions/14136776/linking-armadillo-with-xcode

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!