[CMake] cmake create executable Undefined symbols for architecture x86_64:

Micha Hergarden micha.hergarden at gmail.com
Thu Jul 6 02:48:49 EDT 2017


On 05-07-17 22:50, Sean Wayland wrote:
> I am attempting to write a cmakelists.txt file for an application.
> The application has a couple of dependencies.
> I have been able to build targets for the dependencies but when I try
> and add an executable for the main application I encounter this error.
>
> Undefined symbols for architecture x86_64:
>
>   "_main", referenced from:
>
>      implicit entry/start for main executable
>
> ld: symbol(s) not found for architecture x86_64
>
> clang: error: linker command failed with exit code 1 (use -v to see invocation)
>
>
> Googling the error and looking on stack exchange suggests that I don't
> have a main function in the implicit entry/start .
>
> Where does it look for this function ?
> Does that file need to be first in the list of sources ?
>
>
>
> This function is included here :
> ${CATSMAT_DIR}/Application/CATSMAT_main.cpp
>
> My cmake file is below.
>
> Any advice would be appreciated I have been stuck here for a while!
>
> Best Sean
>
>
> #######################################
> # CMAKE CATSTMAT
> #######################################
> cmake_minimum_required(VERSION 3.6.3)
> set(CMAKE_CXX_STANDARD 14)
> if(CMAKE_CONFIGURATION_TYPES)
> set(CMAKE_CONFIGURATION_TYPES Debug Release)
> endif()
>
> if(UNIX)
> add_definitions(-Wall -DGCC)
> endif(UNIX)
>
> ##### RPATH SETTING #####
> set(CMAKE_MACOSX_RPATH 1)
>
> #if(APPLE)
> # set (CMAKE_OSX_ARCHITECTURES "x86_64 i386")
> # if (${CMAKE_SYSTEM_VERSION} VERSION_LESS 9.0.0)
> # set (CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.4u.sdk)
> # elseif (${CMAKE_SYSTEM_VERSION} VERSION_LESS 10.8.0)
> # set (CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.5.sdk)
> # elseif (${XCODE_VERSION} VERSION_LESS 4.0.0)
> # set (CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.6.sdk)
> # else ()
> # set (CMAKE_OSX_SYSROOT "macosx10.7")
> # endif ()
> # set (CMAKE_C++_FLAGS -mmacosx-version-min=10.4)
> #endif(APPLE)
> #
> #if(WIN32)
> # add_definitions(-DWINVER=0x0400 -DWIN32)
> # if(${CMAKE_GENERATOR} STREQUAL "Visual Studio 6")
> #  add_definitions(-DVC6)
> # elseif(${CMAKE_GENERATOR} STREQUAL "Visual Studio 8 2005")
> #  add_definitions(-DVC2005)
> # endif(${CMAKE_GENERATOR} STREQUAL "Visual Studio 6")
> #endif(WIN32)
>
> ###############  BOOST LIBRARIES ###########
> if (APPLE)
> set(BOOST_ROOT "/usr/local/boost")
> set(BOOST_FILESYSTEM_LIB  /usr/local/boost/lib/libboost_filesystem.dylib)
> set(BOOST_SYSTEM_LIB      /usr/local/boost/lib/libboost_system.dylib)
>
> else (NOT APPLE)
> set(BOOST_ROOT "C:/local/boost_1_58_0")
> set(BOOST_FILESYSTEM_LIB  C:/local/boost_1_58_0/lib64-msvc-12.0)
> set(BOOST_SYSTEM_LIB      C:/local/boost_1_58_0/lib64-msvc-12.0)
> endif (APPLE)
>
> FIND_PACKAGE( Boost 1.58.0 REQUIRED  )
> INCLUDE_DIRECTORIES( ${Boost_INCLUDE_DIR} )
>
>
> #######################################
> # set directories, src and headers.
>
> set (CATSMAT_DIR    /Users/seanwayland/Desktop/CATSMAT-master/catsmat/catsmat )
> set (libIMUSANT_DIR    ${CMAKE_CURRENT_SOURCE_DIR}/../../libIMUSANT)
> set (LOKI_DIR               ${CMAKE_CURRENT_SOURCE_DIR}/../../Loki)
> set (SUFFIX_TREE_DIR        ${CMAKE_CURRENT_SOURCE_DIR}/../../SuffixTree)
> set (GOOGLE_TEST_INC_DIR
> ${CMAKE_CURRENT_SOURCE_DIR}/../../googletest-master/googletest/include)
> set (IMUSANT_DIR        ${CMAKE_CURRENT_SOURCE_DIR}/../../libIMUSANT)
>
>
> set (LIBMUSICXML_DIR    ${CMAKE_CURRENT_SOURCE_DIR}/../../libMusicXMLv3)
>
>
> #### SET SOURCES EXPLICITLY #####
>
> set(SRC
>
> ${CATSMAT_DIR}/Analysis/src/IMUSANT_contour_suffixtree_builder.cpp
> ${CATSMAT_DIR}/Analysis/src/IMUSANT_generalised_interval_suffixtree_builder.cpp
> ${CATSMAT_DIR}/Analysis/src/IMUSANT_interval_suffixtree_builder.cpp
> ${CATSMAT_DIR}/Analysis/src/IMUSANT_pitch_suffixtree_builder.cpp
> ${CATSMAT_DIR}/Analysis/src/IMUSANT_repeated_interval_substring.cpp
> ${CATSMAT_DIR}/Analysis/src/IMUSANT_t_repeated_substring.cpp
> ${CATSMAT_DIR}/Analysis/src/IMUSANT_VectorMapAnalysisTypes.cpp
>
> ${CATSMAT_DIR}/Application/CATSMAT_main.cpp
> ${CATSMAT_DIR}/Application/CATSMAT_menu.cpp
>
> ${CATSMAT_DIR}/CounterpointAnalysis/src/CATSMAT_chord.cpp
> ${CATSMAT_DIR}/CounterpointAnalysis/src/CATSMAT_collectionvisitor.cpp
> ${CATSMAT_DIR}/CounterpointAnalysis/src/CATSMAT_cp_matrix.cpp
> ${CATSMAT_DIR}/CounterpointAnalysis/src/CATSMAT_dyad_sequences.cpp
> ${CATSMAT_DIR}/CounterpointAnalysis/src/CATSMAT_dyadtuple_sequences.cpp
> ${CATSMAT_DIR}/CounterpointAnalysis/src/CATSMAT_sonority_sequences.cpp
> ${CATSMAT_DIR}/CounterpointAnalysis/src/CATSMAT_TrigramSequences.cpp
> ${CATSMAT_DIR}/CounterpointAnalysis/src/CATSMAT_TrigramSuffixTreeBuilder.cpp
>
> ${CATSMAT_DIR}/GeneralAnalysis/src/CATSMAT_canonic_techniques_tools.cpp
> ${CATSMAT_DIR}/GeneralAnalysis/src/CATSMAT_partdata.cpp
> ${CATSMAT_DIR}/GeneralAnalysis/src/CATSMAT_processing.cpp
> ${CATSMAT_DIR}/GeneralAnalysis/src/CATSMAT_score_profile.tpp
> ${CATSMAT_DIR}/GeneralAnalysis/src/CATSMAT_score_splitter.cpp
> ${CATSMAT_DIR}/GeneralAnalysis/src/CATSMAT_score_profile_special.cpp
> ${CATSMAT_DIR}/GeneralAnalysis/src/CATSMAT_scoredata.cpp
> ${CATSMAT_DIR}/GeneralAnalysis/src/CATSMAT_scoredatacollector.cpp
>
> ${CATSMAT_DIR}/Segmentation/IMUSANT_segment.cpp
> ${CATSMAT_DIR}/Segmentation/IMUSANT_set_of_segment.cpp
>
> ${CATSMAT_DIR}/Segmentation/FixedPeriodDetection/src/IMUSANT_fixed_period_segmenter.cpp
> ${CATSMAT_DIR}/Segmentation/FixedPeriodDetection/src/IMUSANT_partlist_ordered_by_part_entry.cpp
> ${CATSMAT_DIR}/Segmentation/FixedPeriodDetection/src/IMUSANT_segmented_part_fixed_period.cpp
> ${CATSMAT_DIR}/Segmentation/FixedPeriodDetection/src/SegmentedScoreFixedPeriod.cpp
>
> ${CATSMAT_DIR}/Segmentation/LocalBoundaryDetectionModel/src/IMUSANT_interval_profile_LBDM.cpp
> ${CATSMAT_DIR}/Segmentation/LocalBoundaryDetectionModel/src/IMUSANT_LBDM_segmenter.cpp
> ${CATSMAT_DIR}/Segmentation/LocalBoundaryDetectionModel/src/IMUSANT_segmented_note_vectors.cpp
> ${CATSMAT_DIR}/Segmentation/LocalBoundaryDetectionModel/src/IMUSANT_segmented_part_LBDM.cpp
> ${CATSMAT_DIR}/Segmentation/LocalBoundaryDetectionModel/src/IMUSANT_segmented_profile_vectors.cpp
> ${CATSMAT_DIR}/Segmentation/LocalBoundaryDetectionModel/src/IMUSANT_weighted_strength_vectors.cpp
>
>
>
>
> )
>
>
>
>
> # old version of adding source code
>
> #set (SRCFOLDERS
>
>
> #       ${CATSMAT_DIR}/Analysis/src
> #       ${CATSMAT_DIR}/CounterpointAnalysis/src
> #       ${CATSMAT_DIR}/GeneralAnalysis/src
> #       ${CATSMAT_DIR}/Segmentation/FixedPeriodDetection/src
> #       ${CATSMAT_DIR}/Segmentation/LocalBoundaryDetectionModel/src
> #       ${CATSMAT_DIR}/Application
> #       ${CATSMAT_DIR}/Segmentation/LocalBoundaryDetectionModel/src
> #       ${CATSMAT_DIR}/Segmentation
> #       ${CATSMAT_DIR}/Utilities
> #)
>
>
> set (INCFOLDERS
> ${libIMUSANT_DIR}
> ${CATSMAT_DIR}/Analysis/inc
>         ${CATSMAT_DIR}/Application
>         ${CATSMAT_DIR}/CounterpointAnalysis/inc
>         ${CATSMAT_DIR}/GeneralAnalysis/inc
>         ${CATSMAT_DIR}/Segmentation
>         ${CATSMAT_DIR}/Segmentation/FixedPeriodDetection/inc
>         ${CATSMAT_DIR}/Segmentation/LocalBoundaryDetectionModel/inc
>         ${CATSMAT_DIR}/Utilities
>         ${libIMUSANT_DIR}/DomainObjects/inc
> ${libIMUSANT_DIR}/Utilities/inc
> ${libIMUSANT_DIR}/FileProcessing/inc
> ${libIMUSANT_DIR}/Converters/MusicXML_v3
> ${libIMUSANT_DIR}/Converters/MusicXML_v3/inc
> ${libIMUSANT_DIR}/Converters/MusicXML_v3/shared/inc
>         ${IMUSANT_DIR}/DomainObjects/inc
> ${IMUSANT_DIR}/Converters/MusicXML_v3
>         ${IMUSANT_DIR}/Converters/MusicXML_v3/inc
> ${IMUSANT_DIR}/Converters/Shared/inc
>         ${IMUSANT_DIR}/FileProcessing/inc
>         ${IMUSANT_DIR}/FileProcessing/Analysis/Segmentation/FixedPeriodDetection/
>         ${IMUSANT_DIR}/Utilities/inc
>         ${SUFFIXTREE_DIR}
> ${LIBMUSICXML_DIR}/libmusicxml-3.00-src/src
> ${LIBMUSICXML_DIR}/libmusicxml-3.00-src/src/lib
> ${LIBMUSICXML_DIR}/libmusicxml-3.00-src/src/visitors
> ${LIBMUSICXML_DIR}/libmusicxml-3.00-src/src/parser
>         ${LOKI_DIR}
> ${SUFFIX_TREE_DIR}
> ${GOOGLE_TEST_INC_DIR}
> )
>
>
> #foreach(folder ${SRCFOLDERS})
> # set(SRC ${SRC} "${folder}/*.cpp") # add source files
> #endforeach(folder)
> #file (GLOB CORESRC RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${SRC})
>
>
>
> ## is this necessary I think target link directories might do the job ?
>
> foreach(folder ${INCFOLDERS})
> set(HEADERS ${HEADERS} "${folder}/*.h") # add header files
> set(INCL ${INCL} "${folder}") # add include folders
> endforeach(folder)
>  file (GLOB COREH RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${HEADERS})
>
>
> #######################################
> # set includes ( is this needed ? )
> include_directories( ${INCFOLDERS})
> set_source_files_properties (${COREH} PROPERTIES HEADER_FILE_ONLY TRUE)
>
>
> #######################################
> # set library target
>
> #if(APPLE OR MSVC)
>
> set(target catsmat)
>
> # I don't know why these if statements are included they seem to do nothing '
> #else(APPLE OR MSVC)
> # set(target catsmat)
> #endif(APPLE OR MSVC)
>
> ##if(MSVC)
> ## enable_language(RC)
> ## set(LIBCONTENT ${CORESRC} ${COREH}
> ${CATSMAT_DIR}/win32/libIMUSANT/libIMUSANT.rc)
> ##else(MSVC)
> ## set(LIBCONTENT ${CORESRC} ${COREH})
> ##endif(MSVC)
>
> add_executable(${target} ${SRC} )
>
> #### add include directories
> include_directories ( ${INCFOLDERS} )
>
> ###############  Targeted Libraries ###########
>
> TARGET_LINK_LIBRARIES(${target} gtest)
> TARGET_LINK_LIBRARIES(${target} ${BOOST_FILESYSTEM_LIB})
> TARGET_LINK_LIBRARIES(${target} ${BOOST_SYSTEM_LIB})
> TARGET_LINK_LIBRARIES(${target} libmusicxml2)
> TARGET_LINK_LIBRARIES(${target} libIMUSANT)
>
>
> set_target_properties (${target} PROPERTIES
> FRAMEWORK TRUE
> VERSION ${VERSION}
>                         C_STANDARD 99
> FRAMEWORK_VERSION ${VERSION}
> PUBLIC_HEADER "${COREH}"
> DEFINE_SYMBOL LIBMUSICXML_EXPORTS
> MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${STRVERS}
> MACOSX_FRAMEWORK_BUNDLE_VERSION ${SSTRVERS}
> )
>
>
>
> #######################################
> # install setup
> if(NOT APPLE)
> install ( TARGETS ${target} ${TOOLS}
> RUNTIME DESTINATION bin
>     LIBRARY DESTINATION lib
>     ARCHIVE DESTINATION lib
>     FRAMEWORK DESTINATION "/Library/Frameworks" CONFIGURATIONS Release
>     PUBLIC_HEADER DESTINATION include/libmusicxml
> )
> endif(NOT APPLE)
>
>
>
>
>
>
Hello Sean,

Could you try adding a 'project(CATSTMAT)' call right at the top of your
CMakeLists.txt? As well as setting a name for the project, this call
also enables languages by default.

HTH,
Micha


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 525 bytes
Desc: OpenPGP digital signature
URL: <http://public.kitware.com/pipermail/cmake/attachments/20170706/77279bbb/attachment.sig>


More information about the CMake mailing list