EDIT :
If you fall on this post, you may want to jump directly to the answer
I sent a post about my confusion earlie
All the issues I had, that were giving
Undefined symbols for architecture x86_64
were due to the fact that some libraries were compiled with libstdc++ and could not be used for code that is compiled/linked with libc++
libc++ is in fact the default new library used by clang since Mavericks, however it is possible to compile with the same clang (no need to install an old gcc) with the classical libstdc++ by using the option
-stdlib=libstdc++
For those who use Boost it is also possible to have boost libraries on mavericks that are compiled/linked with libstdc++ by downloading the source and using (when compiling it) instead of the classical
./b2
the following
./b2 cxxflags="-stdlib=libstdc++" linkflags="-stdlib=libstdc++"
For those using Cmake, you may want to add in the adequate cmake file something similar to:
find_library (LIBSTDCXX NAMES stdc++)
and
add_compile_options(-stdlib=libstdc++)
and
target_link_libraries(${PROJECT_NAME} ${LIBSTDCXX} ${YOUR_OTHER_LIBRARIES))
I am sort of lazy and not going to read this, so feel free to vote down...
I think you are trying build a fat 32/64 bit library...
you have a couple of ways to do this, one if to build explicitly with 32-bit and explicitly with 64-bit... then use lipo
to combine them.
consider nominal C++ code is stored in main.cpp
then:
grady$ clang++ main.cpp -m64 -o64.out
grady$ file 64.out
64.out: Mach-O 64-bit executable x86_64
grady$ clang++ main.cpp -m32 -o32.out
grady$ file 32.out
32.out: Mach-O executable i386
grady$ lipo -arch i386 32.out -arch x86_64 64.out -create -output fat.out
grady$ file fat.out
fat.out: Mach-O universal binary with 2 architectures
fat.out (for architecture i386): Mach-O executable i386
fat.out (for architecture x86_64): Mach-O 64-bit executable x86_64
or you can generally use some shortcuts with apple tools:
grady$ clang++ main.cpp -arch i386 -arch x86_64 -ofat2.out
grady$ file fat2.out
fat2.out: Mach-O universal binary with 2 architectures
fat2.out (for architecture i386): Mach-O executable i386
fat2.out (for architecture x86_64): Mach-O 64-bit executable x86_64