为什么OSX在链接期间跳过符号 - 架构x86_64的未定义符号

时间:2015-12-14 21:38:27

标签: c++ macos clang

当我从" g ++"切换时,

更新 to" c ++"一切都编译和链接很好。我理解这两个地图都是铿锵的,所以我不确定区别是什么。

====

我有一个Makefile,可以在Ubuntu Linux上正常运行,为Java Native项目编译JNI实现。它使用我自己的静态库" libpt.a"。

我试图在Yosemite OSX上编译Makefile。它主要是这样,但它没有链接到libpt.a中的少数几个符号(在这种情况下我在OSX上专门重新编译)。

g++  -L. -shared -o "libphoto_jni.dylib" PhotoNativeInterface.o -lpt
Undefined symbols for architecture x86_64:
  "_parseWpiEnumString", referenced from:
      parseWpiAngle(char const*) in PhotoNativeInterface.o
      parseWpiCategory(char const*) in PhotoNativeInterface.o
      parseWpiColor(char const*) in PhotoNativeInterface.o
      parseWpiProcessingQuality(char const*) in PhotoNativeInterface.o

然而,符号似乎就在那里:

$ ls -al libpt.a
-rw-r--r--  1 jdowdell  110244447  2493728 Dec 14 13:23 libpt.a
$ nm libpt.a
[redacted]
libpt.a(lib.cc.o):
[redacted]
0000000000000000 T _parseWpiEnumString
[redacted]
$ ar -x libpt.a lib.cc.o
$ file lib.cc.o
lib.cc.o: Mach-O 64-bit object x86_64

如果重要:

$ g++ -v
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn)
Target: x86_64-apple-darwin14.5.0
Thread model: posix

0 个答案:

没有答案