libigl / libigl.github.io

Repository for the libigl website, online tutorial and documentation
http://libigl.github.io
4 stars 29 forks source link

Hello example does not compile #30

Closed erooke closed 4 years ago

erooke commented 4 years ago

On the index page there is a simple hello world example to make sure you have things set up. Trying to compile it with the supplied command:

g++ -std=c++11 -I/usr/local/include/eigen3 -I./libigl/include/ hello.cpp -o hello

Resulted in this error message on my end.

/usr/bin/ld: /tmp/ccmLIPie.o: in function `_ZNSt6threadC1IRKZN3igl12parallel_forIiZNS1_12parallel_forIiZNS1_20squared_edge_lengthsIN5Eigen6MatrixIdLin1ELin1ELi0ELin1ELin1EEENS6_IiLin1ELin1ELi0ELin1ELin1EEENS6_IdLin1ELi3ELi0ELin1ELi3EEEEEvRKNS5_10MatrixBaseIT_EERKNSA_IT0_EERNS5_15PlainObjectBaseIT1_EEEUliE_EEbSB_RKSF_mEUlmE_ZNS3_IiSN_EEbSB_SP_mEUlimE0_SQ_EEbSB_SP_RKSK_RKT2_mEUliimE_JRiS10_RmEvEEOSB_DpOT0_':
main.cpp:(.text._ZNSt6threadC2IRKZN3igl12parallel_forIiZNS1_12parallel_forIiZNS1_20squared_edge_lengthsIN5Eigen6MatrixIdLin1ELin1ELi0ELin1ELin1EEENS6_IiLin1ELin1ELi0ELin1ELin1EEENS6_IdLin1ELi3ELi0ELin1ELi3EEEEEvRKNS5_10MatrixBaseIT_EERKNSA_IT0_EERNS5_15PlainObjectBaseIT1_EEEUliE_EEbSB_RKSF_mEUlmE_ZNS3_IiSN_EEbSB_SP_mEUlimE0_SQ_EEbSB_SP_RKSK_RKT2_mEUliimE_JRiS10_RmEvEEOSB_DpOT0_[_ZNSt6threadC5IRKZN3igl12parallel_forIiZNS1_12parallel_forIiZNS1_20squared_edge_lengthsIN5Eigen6MatrixIdLin1ELin1ELi0ELin1ELin1EEENS6_IiLin1ELin1ELi0ELin1ELin1EEENS6_IdLin1ELi3ELi0ELin1ELi3EEEEEvRKNS5_10MatrixBaseIT_EERKNSA_IT0_EERNS5_15PlainObjectBaseIT1_EEEUliE_EEbSB_RKSF_mEUlmE_ZNS3_IiSN_EEbSB_SP_mEUlimE0_SQ_EEbSB_SP_RKSK_RKT2_mEUliimE_JRiS10_RmEvEEOSB_DpOT0_]+0x3f): undefined reference to `pthread_create'
/usr/bin/ld: /tmp/ccmLIPie.o: in function `_ZNSt6threadC1IRKZN3igl12parallel_forIiZNS1_12parallel_forIiZNS1_20squared_edge_lengthsIN5Eigen6MatrixIdLin1ELin1ELi0ELin1ELin1EEENS6_IiLin1ELin1ELi0ELin1ELin1EEENS6_IdLin1ELi3ELi0ELin1ELi3EEEEEvRKNS5_10MatrixBaseIT_EERKNSA_IT0_EERNS5_15PlainObjectBaseIT1_EEEUliE_EEbSB_RKSF_mEUlmE_ZNS3_IiSN_EEbSB_SP_mEUlimE0_SQ_EEbSB_SP_RKSK_RKT2_mEUliimE_JRiRKiRmEvEEOSB_DpOT0_':
main.cpp:(.text._ZNSt6threadC2IRKZN3igl12parallel_forIiZNS1_12parallel_forIiZNS1_20squared_edge_lengthsIN5Eigen6MatrixIdLin1ELin1ELi0ELin1ELin1EEENS6_IiLin1ELin1ELi0ELin1ELin1EEENS6_IdLin1ELi3ELi0ELin1ELi3EEEEEvRKNS5_10MatrixBaseIT_EERKNSA_IT0_EERNS5_15PlainObjectBaseIT1_EEEUliE_EEbSB_RKSF_mEUlmE_ZNS3_IiSN_EEbSB_SP_mEUlimE0_SQ_EEbSB_SP_RKSK_RKT2_mEUliimE_JRiRKiRmEvEEOSB_DpOT0_[_ZNSt6threadC5IRKZN3igl12parallel_forIiZNS1_12parallel_forIiZNS1_20squared_edge_lengthsIN5Eigen6MatrixIdLin1ELin1ELi0ELin1ELin1EEENS6_IiLin1ELin1ELi0ELin1ELin1EEENS6_IdLin1ELi3ELi0ELin1ELi3EEEEEvRKNS5_10MatrixBaseIT_EERKNSA_IT0_EERNS5_15PlainObjectBaseIT1_EEEUliE_EEbSB_RKSF_mEUlmE_ZNS3_IiSN_EEbSB_SP_mEUlimE0_SQ_EEbSB_SP_RKSK_RKT2_mEUliimE_JRiRKiRmEvEEOSB_DpOT0_]+0x3f): undefined reference to `pthread_create'
/usr/bin/ld: /tmp/ccmLIPie.o: in function `_ZNSt6threadC1IRKZN3igl12parallel_forIiZNS1_12parallel_forIiZNS1_20squared_edge_lengthsIN5Eigen6MatrixIdLin1ELin1ELi0ELin1ELin1EEENS6_IiLin1ELin1ELi0ELin1ELin1EEENS6_IdLin1ELi3ELi0ELin1ELi3EEEEEvRKNS5_10MatrixBaseIT_EERKNSA_IT0_EERNS5_15PlainObjectBaseIT1_EEEUliE0_EEbSB_RKSF_mEUlmE_ZNS3_IiSN_EEbSB_SP_mEUlimE0_SQ_EEbSB_SP_RKSK_RKT2_mEUliimE_JRiS10_RmEvEEOSB_DpOT0_':
main.cpp:(.text._ZNSt6threadC2IRKZN3igl12parallel_forIiZNS1_12parallel_forIiZNS1_20squared_edge_lengthsIN5Eigen6MatrixIdLin1ELin1ELi0ELin1ELin1EEENS6_IiLin1ELin1ELi0ELin1ELin1EEENS6_IdLin1ELi3ELi0ELin1ELi3EEEEEvRKNS5_10MatrixBaseIT_EERKNSA_IT0_EERNS5_15PlainObjectBaseIT1_EEEUliE0_EEg++ -std=c++11 -I/usr/local/include/eigen3 -I./libigl/include/ hello.cpp -o hellobSB_RKSF_mEUlmE_ZNS3_IiSN_EEbSB_SP_mEUlimE0_SQ_EEbSB_SP_RKSK_RKT2_mEUliimE_JRiS10_RmEvEEOSB_DpOT0_[_ZNSt6threadC5IRKZN3igl12parallel_forIiZNS1_12parallel_forIiZNS1_20squared_edge_lengthsIN5Eigen6MatrixIdLin1ELin1ELi0ELin1ELin1EEENS6_IiLin1ELin1ELi0ELin1ELin1EEENS6_IdLin1ELi3ELi0ELin1ELi3EEEEEvRKNS5_10MatrixBaseIT_EERKNSA_IT0_EERNS5_15PlainObjectBaseIT1_EEEUliE0_EEbSB_RKSF_mEUlmE_ZNS3_IiSN_EEbSB_SP_mEUlimE0_SQ_EEbSB_SP_RKSK_RKT2_mEUliimE_JRiS10_RmEvEEOSB_DpOT0_]+0x3f): undefined reference to `pthread_create'
/usr/bin/ld: /tmp/ccmLIPie.o: in function `_ZNSt6threadC1IRKZN3igl12parallel_forIiZNS1_12parallel_forIiZNS1_20squared_edge_lengthsIN5Eigen6MatrixIdLin1ELin1ELi0ELin1ELin1EEENS6_IiLin1ELin1ELi0ELin1ELin1EEENS6_IdLin1ELi3ELi0ELin1ELi3EEEEEvRKNS5_10MatrixBaseIT_EERKNSA_IT0_EERNS5_15PlainObjectBaseIT1_EEEUliE0_EEbSB_RKSF_mEUlmE_ZNS3_IiSN_EEbSB_SP_mEUlimE0_SQ_EEbSB_SP_RKSK_RKT2_mEUliimE_JRiRKiRmEvEEOSB_DpOT0_':
main.cpp:(.text._ZNSt6threadC2IRKZN3igl12parallel_forIiZNS1_12parallel_forIiZNS1_20squared_edge_lengthsIN5Eigen6MatrixIdLin1ELin1ELi0ELin1ELin1EEENS6_IiLin1ELin1ELi0ELin1ELin1EEENS6_IdLin1ELi3ELi0ELin1ELi3EEEEEvRKNS5_10MatrixBaseIT_EERKNSA_IT0_EERNS5_15PlainObjectBaseIT1_EEEUliE0_EEbSB_RKSF_mEUlmE_ZNS3_IiSN_EEbSB_SP_mEUlimE0_SQ_EEbSB_SP_RKSK_RKT2_mEUliimE_JRiRKiRmEvEEOSB_DpOT0_[_ZNSt6threadC5IRKZN3igl12parallel_forIiZNS1_12parallel_forIiZNS1_20squared_edge_lengthsIN5Eigen6MatrixIdLin1ELin1ELi0ELin1ELin1EEENS6_IiLin1ELin1ELi0ELin1ELin1EEENS6_IdLin1ELi3ELi0ELin1ELi3EEEEEvRKNS5_10MatrixBaseIT_EERKNSA_IT0_EERNS5_15PlainObjectBaseIT1_EEEUliE0_EEbSB_RKSF_mEUlmE_ZNS3_IiSN_EEbSB_SP_mEUlimE0_SQ_EEbSB_SP_RKSK_RKT2_mEUliimE_JRiRKiRmEvEEOSB_DpOT0_]+0x3f): undefined reference to `pthread_create'
/usr/bin/ld: /tmp/ccmLIPie.o: in function `_ZNSt6threadC1IRKZN3igl12parallel_forIlZNS1_12parallel_forIlZNS1_10doubleareaIN5Eigen6MatrixIdLin1ELi3ELi0ELin1ELi3EEENS6_IdLin1ELi1ELi0ELin1ELi1EEEEEvRKNS5_10MatrixBaseIT_EENSA_6ScalarERNS5_15PlainObjectBaseIT0_EEEUliE_EEbSA_RKSG_mEUlmE_ZNS3_IlSJ_EEbSA_SL_mEUllmE0_SM_EEbSA_SL_RKT1_RKT2_mEUlllmE_JRlSX_RmEvEEOSA_DpOT0_':
main.cpp:(.text._ZNSt6threadC2IRKZN3igl12parallel_forIlZNS1_12parallel_forIlZNS1_10doubleareaIN5Eigen6MatrixIdLin1ELi3ELi0ELin1ELi3EEENS6_IdLin1ELi1ELi0ELin1ELi1EEEEEvRKNS5_10MatrixBaseIT_EENSA_6ScalarERNS5_15PlainObjectBaseIT0_EEEUliE_EEbSA_RKSG_mEUlmE_ZNS3_IlSJ_EEbSA_SL_mEUllmE0_SM_EEbSA_SL_RKT1_RKT2_mEUlllmE_JRlSX_RmEvEEOSA_DpOT0_[_ZNSt6threadC5IRKZN3igl12parallel_forIlZNS1_12parallel_forIlZNS1_10doubleareaIN5Eigen6MatrixIdLin1ELi3ELi0ELin1ELi3EEENS6_IdLin1ELi1ELi0ELin1ELi1EEEEEvRKNS5_10MatrixBaseIT_EENSA_6ScalarERNS5_15PlainObjectBaseIT0_EEEUliE_EEbSA_RKSG_mEUlmE_ZNS3_IlSJ_EEbSA_SL_mEUllmE0_SM_EEbSA_SL_RKT1_RKT2_mEUlllmE_JRlSX_RmEvEEOSA_DpOT0_]+0x42): undefined reference to `pthread_create'
/usr/bin/ld: /tmp/ccmLIPie.o:main.cpp:(.text._ZNSt6threadC2IRKZN3igl12parallel_forIlZNS1_12parallel_forIlZNS1_10doubleareaIN5Eigen6MatrixIdLin1ELi3ELi0ELin1ELi3EEENS6_IdLin1ELi1ELi0ELin1ELi1EEEEEvRKNS5_10MatrixBaseIT_EENSA_6ScalarERNS5_15PlainObjectBaseIT0_EEEUliE_EEbSA_RKSG_mEUlmE_ZNS3_IlSJ_EEbSA_SL_mEUllmE0_SM_EEbSA_SL_RKT1_RKT2_mEUlllmE_JRlRKlRmEvEEOSA_DpOT0_[_ZNSt6threadC5IRKZN3igl12parallel_forIlZNS1_12parallel_forIlZNS1_10doubleareaIN5Eigen6MatrixIdLin1ELi3ELi0ELin1ELi3EEENS6_IdLin1ELi1ELi0ELin1ELi1EEEEEvRKNS5_10MatrixBaseIT_EENSA_6ScalarERNS5_15PlainObjectBaseIT0_EEEUliE_EEbSA_RKSG_mEUlmE_ZNS3_IlSJ_EEbSA_SL_mEUllmE0_SM_EEbSA_SL_RKT1_RKT2_mEUlllmE_JRlRKlRmEvEEOSA_DpOT0_]+0x42): more undefined references to `pthread_create' follow
collect2: error: ld returned 1 exit status

Where the linker can't seem to find pthread_create. Not sure if something is up with my machine or the example but adding the flag -lpthread to the command allows g++ to find the pthread code.

jdumas commented 4 years ago

@alecjacobson @danielepanozzo how should we address that? Just add the lpthread out of the blue to compile libigl? Or remove the example that uses parallel_for under the hood and risk the user getting surprised when he uses code that actually depends on the parallel_for later on?

danielepanozzo commented 4 years ago

lpthread will likely not work on clang. Let's discuss it during the hackathon, I would be inclined to only support the compilation through CMake.

erooke commented 4 years ago

To my knowledge as early as Clang 5.0.0 has supported lpthread

Running :

clang++ -std=c++11 -lpthread -I/usr/local/include/eigen3 -I./libigl/include/ hello.cpp -o hello

compiled just fine on my end with clang version 9.0.1