-
Notifications
You must be signed in to change notification settings - Fork 282
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
MacOSX --with-adobe link issue. Work in progress. Code and documentat…
…ion update.
- Loading branch information
Showing
9 changed files
with
196 additions
and
134 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,173 @@ | ||
|
||
|
||
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 | ||
|
||
|
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.