Hi,
We already supply the correct CMAKE_C_FLAGS and CMAKE_CXX_FLAGS to the
compiler and link flags for 64bit. So the issue is not with the compiler
or linker but the "CreateExportList"- tool cmake invokes to generate the
list of symbols to be exported by the shared library before linking it.
See the attached file for the link.txt, created by cmake for one of our
libraries, to see what calls cmake generated to link it. The second step
- to link the library - (/usr/vacpp/bin/xlC_r -q64 ...) has the
correct flag to generate 64bit output (-q64), but the first step - to
generate the exported symbols list -. (/usr/vacpp/bin/CreateExportList
... ) is missing the "-X64" argument it needs to find the symbols for a
64bit build. So the compile and link steps have the correct flags but
the tool to create the list of exported symbols for the library has not.
The consequence is that the generated library does not export ANY symbol
and this of course provokes the missing symbol errors wenn linking
against it. A workaround I found is to set the shell environment
variable "OBJECT_MODE" to "64" before invoking a (c)make. But I think
this should be handled correctly by cmake, as cmake knows whether it
creates a 32 or 64 bit library (sizeof(void*)) and can then set the flag
for "/usr/vacpp/bin/CreateExportList" correctly.
Regards,
Michael.
On 02/20/2015 03:34 AM, Roman Bolshakov wrote:
If your project is supposed to be built 64-bit only on 64-bit build
host and 32-bit only on 32-bit one, you can just append proper flag
into CMAKE_CXX_FLAGS and CMAKE_C_FLAGS depending on the value of
CMAKE_SIZEOF_VOID_P
(http://www.cmake.org/cmake/help/v3.0/variable/CMAKE_SIZEOF_VOID_P.html).
In the case of multi-lib OS (where you can build both 32-bit and
64-bit app on the same 64-bit build host) you could specify something
like -DPLATFORM=32 -DPLATFORM=64 when you invoke CMake. The approach
would require you to have two separate build trees though.
--
Michael Hufer
Senior Software Developer
-------------------------------
Dion Global Solutions GmbH
Mainzer Landstr. 199 I 60322 Frankfurt am Main I Germany
phone: +49 69 50952 241
email:[email protected] | web: www.dionglobal.com/de
HRB-Nr./Commercial Register No. 83397
Geschäftsführer / Managing Directors: Ralph James Horne, Joseph Nash
/usr/vacpp/bin/CreateExportList CMakeFiles/xmq_s.dir/objects.exp
CMakeFiles/xmq_s.dir/Xmq.cpp.o CMakeFiles/xmq_s.dir/XmqMsgDump.cpp.o
CMakeFiles/xmq_s.dir/xmq_s_version.cpp.o
/usr/vacpp/bin/xlC_r -q64 -qthreaded -qalias=noansi -qhalt=e -qtwolink
-qrtti=all -qinlglue -qnotemplateregistry -qnotempinc -qlanglvl=newexcp -g
-L/home/xgbuild/xgen-trunk/lib/AIX_p64
-L/home/xgbuild/xgen-trunk/external/AIX_p64/libs/mqs-6.0/lib
-qexpfile=export.symbols -q64 -bh:5 -lc -lm -G -Wl,-bnoipath
-Wl,-bE:CMakeFiles/xmq_s.dir/objects.exp -o libxmq_s.so
CMakeFiles/xmq_s.dir/Xmq.cpp.o CMakeFiles/xmq_s.dir/XmqMsgDump.cpp.o
CMakeFiles/xmq_s.dir/xmq_s_version.cpp.o
-L/home/xgbuild/xgen-trunk/lib/AIX_p64 ../libxgencore/libxgencore.so -lmqm_r
-lmqmxa64_r -lACE -lexpat -lpcre
-Wl,-blibpath:/home/xgbuild/xgen-trunk/build/pitbull/src/libxgencore:/home/xgbuild/xgen-trunk/lib/AIX_p64:/usr/lib:/lib
--
Powered by www.kitware.com
Please keep messages on-topic and check the CMake FAQ at:
http://www.cmake.org/Wiki/CMake_FAQ
Kitware offers various services to support the CMake community. For more
information on each offering, please visit:
CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html
Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html
Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/cmake