[odb-users] C++11 with clang on OSX 10.8

Jeff Waller truthset at gmail.com
Mon Sep 2 19:32:15 EDT 2013


Just as a base of comparison, I have no problems building and linking
on OS X 10.7 using clang.

However some differences

1) I do not use the packaged odb, but rather generate the source on linux
and simply include the generated source as part of the distribution.  I
don't think this makes any difference, but it's worth mentioning.

2) Version is 2.2.2

3) libodb, libodb-sqllite, libodb-boost are built from source:
./configure CC=clang CXX=clang++, but no other flags.

And then of course own project is built once again
./configure CC=clang CXX=clang++ and no other flags

4) and from above, using autotools not cmake

Maybe as a test, we could compare link, compile steps?

-Jeff


On Aug 29, 2013, at 6:03 AM, Philipp Maluta wrote:

> Ok, I built all the libs with the flags you mentioned. 
> Still I have linker errors about absent symbols
> 
> Undefined symbols for architecture x86_64:
> "odb::sqlite::delete_statement::delete_statement(odb::sqlite::connection&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, odb::sqlite::binding&)", referenced from:
> odb::access::object_traits_impl<NoteEntity, (odb::database_id)1>::erase_query(odb::database&, odb::sqlite::query_base const&) in NoteEntity-odb.cxx.o
> "odb::sqlite::select_statement::select_statement(odb::sqlite::connection&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, odb::sqlite::binding&, odb::sqlite::binding&)", referenced from:
> odb::access::object_traits_impl<NoteEntity, (odb::database_id)1>::query(odb::database&, odb::sqlite::query_base const&) in NoteEntity-odb.cxx.o
> "odb::sqlite::default_value_traits<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, (odb::sqlite::database_type_id)2>::set_image(odb::details::basic_buffer<char>&, unsigned long&, bool&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from:
> odb::access::object_traits_impl<NoteEntity, (odb::database_id)1>::init(odb::access::object_traits_impl<NoteEntity, (odb::database_id)1>::image_type&, NoteEntity const&, odb::sqlite::statement_kind) in NoteEntity-odb.cxx.o
> ld: symbol(s) not found for architecture x86_64
> 
> Maybe the cmake file helps to find any clue.
> 
> cmake_minimum_required(VERSION 2.8.8)
> project(NotesCore)
> set(PROJECT_NAME_STR NotesCore)
> aux_source_directory(src SRC_LIST)
> 
> add_definitions(-Wall -ansi -Wno-deprecated -pthread  --std=c++11 --stdlib=libc++)
> 
> set(COMMON_INCLUDES ${PROJECT_SOURCE_DIR}/include)
> set(EXT_PROJECTS_DIR ${PROJECT_SOURCE_DIR}/ext)
> set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --std=c++11 --stdlib=libc++")
> set(ODB_HEADERS ${COMMON_INCLUDES}/NoteEntity.hpp)
> 
> include_directories(${COMMON_INCLUDES})
> include_directories(SYSTEM /opt/local/include)
> add_library(${PROJECT_NAME} STATIC ${SRC_LIST})
> 
> #-------------------
> # Test
> #-------------------
> 
> enable_testing()
> set(GTEST_USE_OWN_TR1_TUPLE 1)
> set(PROJECT_TEST_NAME ${PROJECT_NAME_STR}_test)
> include_directories(${GTEST_INCLUDE_DIRS} ${COMMON_INCLUDES})
> add_definitions(-Wall -ansi -Wno-deprecated -pthread  --std=c++11 --stdlib=libc++ )
> file(GLOB TEST_SRC_FILES ${PROJECT_SOURCE_DIR}/test/*.cpp)
> 
> find_library(ODB_LIB odb ${EXT_PROJECTS_DIR})
> find_library(ODB_SQLITE_LIB odb-sqlite ${EXT_PROJECTS_DIR} )
> find_library(GMOCK_LIB gmock ${EXT_PROJECTS_DIR})
> find_library(GTEST_LIB gtest ${EXT_PROJECTS_DIR})
> 
> add_executable(${PROJECT_TEST_NAME} ${TEST_SRC_FILES} ${SRC_LIST})
> 
> target_link_libraries(${PROJECT_TEST_NAME} pthread)
> target_link_libraries(${PROJECT_TEST_NAME} ${ODB_SQLITE_LIB})
> target_link_libraries(${PROJECT_TEST_NAME} ${ODB_LIB})
> target_link_libraries(${PROJECT_TEST_NAME} ${SQLITE_LIB})
> target_link_libraries(${PROJECT_TEST_NAME} ${GMOCK_LIB})
> target_link_libraries(${PROJECT_TEST_NAME} ${GTEST_LIB})
> 
> add_test( AuthLayerTest ${PROJECT_TEST_NAME} )
> 
> 
> So, here is lib to build and a target to test it. To the test target I link guest and gmock. So, may that libs conflict? gmock and gtest also built with --std=c++11 and --stdlib=libc++
> 
> 
> 
> 27 авг. 2013, в 21:02, Boris Kolpackov <boris at codesynthesis.com> написал(а):
> 
>> Hi Philipp,
>> 
>> Boris Kolpackov <boris at codesynthesis.com> writes:
>> 
>>> If you are seeing this when building libodb, then you may want to
>>> change the configure command line like this in order to try to
>>> address the first possibility:
>>> 
>>> ./configure CXX="clang++ --std=c++11 --stdlib=libc++" --prefix=/opt/local --disable-threads
>> 
>> And if that still doesn't help, then build libodb (and libodb-sqlite)
>> as static libraries:
>> 
>> ./configure CXX=clang++ CXXFLAGS="--std=c++11 --stdlib=libc++" --disable-shared ...
>> 
>> Boris
>> 
>> 
> 




More information about the odb-users mailing list