You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
174 lines
6.4 KiB
Plaintext
174 lines
6.4 KiB
Plaintext
8 years ago
|
|
||
|
|
||
|
Puzzle with autotools/--with-adobe MacOS-X Only
|
||
|
-----------------------------------------------
|
||
|
Added : 2017-08-17
|
||
|
Modified: 2017-08-18
|
||
|
|
||
|
The --with-adobe code is new (added on Monday/Tuesday 2017-08-15).
|
||
|
It's very much "Work in Progress" and will get lots more polishing.
|
||
|
This builds and links on Mac and Linux (Cygwin isn't ready yet).
|
||
|
Autotools isn't used with Visual Studio
|
||
|
|
||
|
Default build (which compile/links xmpsdk/src) is fine (and passes test suite)
|
||
|
$ sudo make distclean ; make config ; ./configure ; make ; sudo make install ; make samples ; make tests
|
||
|
|
||
|
Status: The 2016/AdobeXMPsdk requires an entry point that's not in the C++ STL library
|
||
|
./configure is building and passing the test suite
|
||
|
./configure --with-adobe=2014 is broken on __ZNSs4_Rep11_S_terminalE
|
||
|
./configure --with-adobe=2016 is broken on __ZNSiD0Ev
|
||
|
|
||
|
The missing entry points are in /usr/lib/libstdc++.6.dylib
|
||
|
When I use install_name_tool to change to libstdc++.6.dylib, I crash in this:
|
||
|
|
||
|
$ c++filt __ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED1Ev
|
||
|
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_string()
|
||
|
$
|
||
|
|
||
|
There's something mixed up concerning the libraries used by Adobe's XMPSDK and libexiv2.26.dylib
|
||
|
-stdlib=libstdc++ will link /usr/lib/libstdc++.6.dylib, however the compiler warns:
|
||
|
clang: warning: libstdc++ is deprecated; move to libc++ [-Wdeprecated]
|
||
|
|
||
|
To build without the external Adobe SDK:
|
||
|
- - - - - - - - - - - - - - - - - - - -
|
||
|
Edit config/config.mk.in and modify:
|
||
|
XMPSDK_LIBS= -lXMPCore
|
||
|
to
|
||
|
XMPSDK_LIBS = ''
|
||
|
|
||
|
$ sudo make distclean ; make config ; ./configure --with-adobe ; make
|
||
|
|
||
|
The following command works:
|
||
|
$ bin/exiv2 http://clanmills.com/Stonehenge.jpg is working
|
||
|
|
||
|
On 2017-08-15 The following command crashes when it attempts to execute XMPsdk code
|
||
|
$ bin/exiv2 --verbose --version
|
||
|
........
|
||
|
config_path=/Users/rmills/.exiv2
|
||
|
uid=501
|
||
|
euid=501
|
||
|
gid=20
|
||
|
dyld: lazy symbol binding failed: Symbol not found: _WXMPMeta_Initialize_1
|
||
|
Referenced from: /Users/rmills/gnu/github/exiv2/src/.libs/libexiv2.26.dylib
|
||
|
Expected in: flat namespace
|
||
|
|
||
|
dyld: Symbol not found: _WXMPMeta_Initialize_1
|
||
|
Referenced from: /Users/rmills/gnu/github/exiv2/src/.libs/libexiv2.26.dylib
|
||
|
Expected in: flat namespace
|
||
|
|
||
|
Abort trap: 6
|
||
|
$
|
||
|
|
||
|
This is correct. libXMPCore.a is not in the mix.
|
||
|
|
||
|
ls -alt src/.libs/libexiv2.26.dylib
|
||
|
-rwxr-xr-x+ 1 rmills staff 2238124 Aug 17 11:07 src/.libs/libexiv2.26.dylib
|
||
|
-------
|
||
|
To add the external Adobe SDK to the mix:
|
||
|
- - - - - - - - - - - - - - - - - - - - -
|
||
|
|
||
|
Edit src/Makefile#242 and change:
|
||
|
@$(LIBTOOL) --mode=link $(LINK.cc) -o ../bin/$@ $(LIBRARY) $(EXIV2OBJ) $(EXIV2COBJ) -rpath $(libdir)
|
||
|
to:
|
||
|
@$(LIBTOOL) --mode=link $(LINK.cc) -lXMPCore -o ../bin/$@ $(LIBRARY) $(EXIV2OBJ) $(EXIV2COBJ) -rpath $(libdir)
|
||
|
|
||
|
$ touch src/version.cpp src/exiv2.cpp ; make
|
||
|
$ ls -alt src/.libs/libexiv2.26.dylib
|
||
|
-rwxr-xr-x+ 1 rmills staff 4312308 Aug 17 11:17 src/.libs/libexiv2.26.dylib
|
||
|
-------
|
||
|
$ bin/exiv2
|
||
|
dyld: Symbol not found: __ZNSiD0Ev
|
||
|
Referenced from: /Users/rmills/gnu/github/exiv2/src/.libs/libexiv2.26.dylib
|
||
|
Expected in: flat namespace
|
||
|
in /Users/rmills/gnu/github/exiv2/src/.libs/libexiv2.26.dylib
|
||
|
Abort trap: 6
|
||
|
605 rmills@rmillsmbp:~/gnu/github/exiv2 $
|
||
|
|
||
|
$ c++filt _ZNSiD0Ev
|
||
|
std::basic_istream<char, std::char_traits<char> >::~basic_istream()
|
||
|
|
||
|
This code is being accessed by Adobe XMPSDK 2016 libXMPCore.a and isn't in the c++ library.
|
||
|
|
||
|
$ nm -g xmpsdk/Adobe/libXMPCore.a | grep _ZNSiD0Ev
|
||
|
U __ZNSiD0Ev
|
||
|
$
|
||
|
|
||
|
Adobe XMPSDK 2014 has a similar problem with __ZNSs4_Rep11_S_terminalE
|
||
|
|
||
|
$ nm -g Adobe/XMP-Toolkit-SDK-CC201412/libXMPCore.a | grep __ZNSs4_Rep11_S_terminalE | sort --unique
|
||
|
U __ZNSs4_Rep11_S_terminalE
|
||
|
$ c++filt __ZNSs4_Rep11_S_terminalE
|
||
|
std::string::_Rep::_S_terminal
|
||
|
|
||
|
|
||
|
Notes (mostly to remind me of painful discoveries)
|
||
|
--------------------------------------------------
|
||
|
|
||
|
How does the build get generated?
|
||
|
$ make config
|
||
|
This generates ./configure by reading config/configure.ac
|
||
|
|
||
|
When you use --with-adobe, CXXFLAGS and LDFLAGS are modified and ENABLE_XMP is set to 2016.
|
||
|
Makefile has code to execute the script xmpsdk/buildXMPsdk.sh which
|
||
|
downloads and builds the XMPsdk to create libCore.a (which we need) and libFiles.a
|
||
|
|
||
|
config/config.mk.in is converted into config/config.mk and included in xmpsdk/src/Makefile
|
||
|
This is really ugly. config.mk also messes with CPPFLAGS and LDFLAGS
|
||
|
|
||
|
To get -lXMPCore into the mix, set XMPSDK_LIBS in config/config.mk.in
|
||
|
XMPSDK_LIBS = -lXMPCore
|
||
|
|
||
|
508 rmills@rmillsmbp:~/gnu/github/exiv2 $ finder Makefile | xargs grep -H config.mk | grep include
|
||
|
./contrib/organize/Makefile:include $(top_srcdir)/config/config.mk
|
||
|
./doc/Makefile:include $(top_srcdir)/config/config.mk
|
||
|
./samples/Makefile:include $(top_srcdir)/config/config.mk
|
||
|
./src/Makefile:include $(top_srcdir)/config/config.mk
|
||
|
./xmpsdk/src/Makefile:include $(top_srcdir)/config/config.mk
|
||
|
509 rmills@rmillsmbp:~/gnu/github/exiv2 $
|
||
|
|
||
|
|
||
|
Compiler options used to build Adobe XMPsdk
|
||
|
-------------------------------------------
|
||
|
|
||
|
For sure, Adobe's code is being built with MacOSX10.8.sdk and -std=c++11
|
||
|
|
||
|
/usr/bin/c++
|
||
|
-DBUILDING_XMPCORE_AS_STATIC=1
|
||
|
-DBUILDING_XMPCORE_LIB=1
|
||
|
-DENABLE_CPP_DOM_MODEL=1
|
||
|
-DHAVE_EXPAT_CONFIG_H=1
|
||
|
-DMAC_ENV=1
|
||
|
-DXML_STATIC=1
|
||
|
-DXMP_64=1
|
||
|
-DXMP_COMPONENT_INT_NAMESPACE=AdobeXMPCore_Int
|
||
|
-DXMP_StaticBuild=1
|
||
|
-I/Users/rmills/gnu/github/exiv2/xmpsdk/Adobe/XMP-Toolkit-SDK-CC201607/XMPCore/build/../..
|
||
|
-I/Users/rmills/gnu/github/exiv2/xmpsdk/Adobe/XMP-Toolkit-SDK-CC201607/XMPCore/build/../../public/include
|
||
|
-I/Users/rmills/gnu/github/exiv2/xmpsdk/Adobe/XMP-Toolkit-SDK-CC201607/XMPCore/build/../../third-party/expat/public/lib
|
||
|
-I/Users/rmills/gnu/github/exiv2/xmpsdk/Adobe/XMP-Toolkit-SDK-CC201607/XMPCore/build/../resource/mac
|
||
|
-funsigned-char
|
||
|
-fshort-enums
|
||
|
-fno-common
|
||
|
-Wall
|
||
|
-Wextra
|
||
|
-Wno-missing-field-initializers
|
||
|
-Wno-shadow
|
||
|
-Wno-reorder
|
||
|
-std=c++11
|
||
|
-Wnon-virtual-dtor
|
||
|
-Woverloaded-virtual
|
||
|
-Wno-unused-variable
|
||
|
-Wno-unused-function
|
||
|
-Wno-unused-parameter
|
||
|
-fstack-protector
|
||
|
-O3
|
||
|
-DNDEBUG=1
|
||
|
-D_NDEBUG=1
|
||
|
-arch x86_64
|
||
|
-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk
|
||
|
-mmacosx-version-min=10.7
|
||
|
-o CMakeFiles/XMPCoreStatic.dir/Users/rmills/gnu/github/exiv2/xmpsdk/Adobe/XMP-Toolkit-SDK-CC201607/XMPCore/source/XMPMeta-GetSet.cpp.o
|
||
|
-c /Users/rmills/gnu/github/exiv2/xmpsdk/Adobe/XMP-Toolkit-SDK-CC201607/XMPCore/source/XMPMeta-GetSet.cpp
|
||
|
|
||
|
|