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

Sean Wayland seanwayland at gmail.com
Wed Jul 5 16:50:14 EDT 2017


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)






-- 
www.seanwayland.com

Sean Wayland


More information about the CMake mailing list