2010-04-11 5 views
2

J'ai compris que CUDA ne fonctionne pas en mode 64 bits sur mon mac (ou ne pouvait pas le faire fonctionner jusqu'à présent). Par conséquent, j'ai décidé de tout compiler pour 32 bits.cmake, gcc, cuda et -m32

J'utilise CMake 2.8 et ajouté les options suivantes

add_definitions(-Wall -m32) 
set(CUDA_64_BIT_DEVICE_CODE OFF) 
set(CMAKE_MODULE_LINKER_FLAGS -m32) 

Cependant quand il essaie de le lier, il fait quelque chose comme ceci:

/usr/bin/c++ -mmacosx-version-min=10.6 -Wl,-search_paths_first -headerpad_max_install_names CMakeFiles/SimpleTestsCUDA.dir/BlockMatrix.cpp.o CMakeFiles/SimpleTestsCUDA.dir/Matrix.cpp.o ./SimpleTestsCUDA_generated_SimpleTests.cu.o ./SimpleTestsCUDA_generated_BlockMatrix.cu.o -o SimpleTestsCUDA /usr/local/cuda/lib/libcudart.dylib /usr/local/cuda/lib/libcuda.dylib 

qui échoue avec beaucoup de « fichier n'est pas de l'architecture requise "avertissements de ld. Maintenant, si j'ajoute manuellement -m32 à la commande ci-dessus cela fonctionne. Cependant je n'ai aucune idée comment apprendre à cmake à ajouter -m32 à chaque invocation de gcc (ou ld). Jusqu'à présent, il le fait pour nvcc et gcc, mais pas pour relier ..

+1

compris que cela fonctionne si j'invoque CMake avec les indicateurs suivants: -DCMAKE_C_FLAGS = -m32 --DCMAKE_CXX_FLAGS = -m32 – Nils

+0

Je pense que j'ai tout compris .. set (CMAKE_C_FLAGS -m32) set (CMAKE_CXX_FLAGS -m32) – Nils

Répondre

2

Si vous définissez le var LDFLAGS env avant d'exécuter CMake sur le projet, il fonctionnera aussi bien:

export LDFLAGS=-m32 
cmake ../source 
3

voir ci-dessus

set(CMAKE_C_FLAGS -m32) 
set(CMAKE_CXX_FLAGS -m32) 
+0

Maintenant que vous avez résolu le problème, vous devez marquer la réponse comme acceptée, afin que le reste d'entre nous puisse voir que la réponse est donnée lorsque nous regardons la liste de questions. :) –

+0

Vous devez attendre comme trois jours ou jusqu'à ce que vous puissiez accepter votre propre réponse: D J'ai donc accepté la réponse de Bill Hoffman .. – Nils

1

Une autre solution pourrait consister à dire:

if (Apple) 
    set (CMAKE_OSX_ARCHITECTURES i386) 
    set (CUDA_64_BIT_DEVICE_CODE OFF) 
endif (Apple) 

Hope this helps.