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

Micha Hergarden micha.hergarden at gmail.com
Thu Jul 6 15:12:54 EDT 2017


On 06-07-17 15:59, Sean Wayland wrote:
> Hi Micha,
> Thanks very much I tried that .. I added it to the application
> directory cmakelists.txt file . Same issue .. It's already in the top
> level cmake file which looks like this ..
>
> project(CATSMAT)
> cmake_minimum_required(VERSION 3.6.3)
>
>
> if (APPLE)
>
>     set(CMAKE_C++_FLAGS -mmacosx-version-min=10.4)
> endif (APPLE)
>
>
> include_directories("catsmat/libIMUSANT")
>
> add_subdirectory (catsmat/googletest-master/googletest)
> add_subdirectory (catsmat/libMusicXMLv3/libmusicxml-3.00-src/cmake)
> add_subdirectory (catsmat/libIMUSANT/cmake)
> add_subdirectory (catsmat/libIMUSANT_Tests/cmake)
> add_subdirectory (catsmat/catsmat/cmake)
>
> set(CMAKE_CXX_STANDARD 14)
>
> On Thu, Jul 6, 2017 at 2:48 AM, Micha Hergarden
> <micha.hergarden at gmail.com> wrote:
>> 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
>>
>>
>>
>> --
>>
>> 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
>
>
Hi Sean,

I'm also a bit confused as you seem to set 'C_STANDARD 99' as a property
for the target, as well as 'set(CMAKE_CXX_STANDARD 14)'. I don't know if
these two settings interfere with each other. Could you remove one of
the two as an experiment?

Regards,
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/c4b4e6b9/attachment.sig>


More information about the CMake mailing list