Связанная ошибка при объединении с примерами Wt

Я использую C ++ webframework для моего проекта.
Я пытаюсь добавить аутентификацию в пример gitmodel.

Я получаю следующие ошибки:

../hangman/CMakeFiles/hangman.wt.dir/Session.o: In function `Session::Session()':     /home/s/Downloads/wt-3.2.3/examples/hangman/Session.C:101: undefined reference to `void Wt::Dbo::Session::mapClass<User>(char const*)'
../hangman/CMakeFiles/hangman.wt.dir/Session.o: In function `Wt::Auth::Dbo::AuthInfo<User>::user() const': /home/s/Downloads/wt-3.2.3/src/Wt/Auth/Dbo/AuthInfo:94: undefined reference to `Wt::Dbo::ptr<User>::ptr(Wt::Dbo::ptr<User> const&)'
../hangman/CMakeFiles/hangman.wt.dir/Session.o: In function `Session::user() const': /home/s/Downloads/wt-3.2.3/examples/hangman/Session.C:138: undefined reference to `Wt::Dbo::ptr<User>::operator bool() const'
/home/s/Downloads/wt-3.2.3/examples/hangman/Session.C:139: undefined reference to `User::User()'
/home/s/Downloads/wt-3.2.3/examples/hangman/Session.C:139: undefined reference to `Wt::Dbo::ptr<User> Wt::Dbo::Session::add<User>(User*)'
/home/s/Downloads/wt-3.2.3/examples/hangman/Session.C:139: undefined reference to `Wt::Dbo::ptr<User>::operator=(Wt::Dbo::ptr<User> const&)'

Полный список ошибок: http://pastie.org/5469803

Я попытался использовать созданный cmake make-файл. После прослеживания выясняется, что эта ошибка компоновщика возникает после запуска link.txt в каталоге CMakeFiles.
Я попытался объединить link.txt для примера gitmodel и примера hangman, потому что hangman тоже выполняет аутентификацию.
Вот мой link.txt:

/usr/bin/c++   -O2 -g ../hangman/CMakeFiles/hangman.wt.dir/Session.o CMakeFiles/gitview.wt.dir/Git.o CMakeFiles/gitview.wt.dir/GitModel.o CMakeFiles/gitview.wt.dir/__/wt-homepage/SourceView.o CMakeFiles/gitview.wt.dir/GitView.o  -o gitview.wt -rdynamic -L/home/s/Downloads/wt-3.2.3/build/src/http -L/home/s/Downloads/wt-3.2.3/build/src -L/home/s/Downloads/wt-3.2.3/build/src/Wt/Dbo -L/home/s/Downloads/wt-3.2.3/build/src/Wt/Dbo/backend -lcrypt -L/usr/local/lib ../../src/http/libwthttp.so.3.2.3 ../../src/libwt.so.3.2.3 ../../src/Wt/Dbo/libwtdbo.so.3.2.3 ../../src/Wt/Dbo/backend/libwtdbosqlite3.so.3.2.3  /usr/local/lib/libboost_filesystem.so /usr/local/lib/libboost_random.so /usr/local/lib/libboost_regex.so /usr/local/lib/libboost_signals.so /usr/local/lib/libboost_system.so /usr/local/lib/libboost_filesystem.so -lz -lssl -lcrypto ../../src/Wt/Dbo/libwtdbo.so.3.2.3 /usr/local/lib/libboost_thread.so /usr/local/lib/libboost_program_options.so /usr/local/lib/libboost_date_time.so -lpthread -ldl -Wl,-rpath,/home/s/Downloads/wt-3.2.3/build/src/http:/home/s/Downloads/wt-3.2.3/build/src:/home/s/Downloads/wt-3.2.3/build/src/Wt/Dbo:/home/s/Downloads/wt-3.2.3/build/src/Wt/Dbo/backend:/usr/local/lib

Pastie ссылка: http://pastie.org/5469815

Может кто-нибудь сказать, что не так с моей командой связывания?

На работающем cmake,
я получил

/home/s/Downloads/wt-3.2.3/examples/gitmodel on master ✗ at  1:24PM
➜ BOOST_FS_LIB=/usr/local/lib/libboost_filesystem.so cmake .
-- ** Not building gitmodel example: requires boost_filesystem library.
CMake Warning (dev) in CMakeLists.txt:
No cmake_minimum_required command is present.  A line of code such as

cmake_minimum_required(VERSION 2.8)

should be added at the top of the file.  The version specified may be lower
if you wish to support older CMake versions for this project.  For more
information run "cmake --help-policy CMP0000".
This warning is for project developers.  Use -Wno-dev to suppress it.

-- Configuring done
-- Generating done
-- Build files have been written to: /home/s/Downloads/wt-3.2.3/examples/gitmodel

2

Решение

Похоже, что компоновщик не находит символы Dbo.

Если вы компилируете с помощью cmake, не могли бы вы предоставить свой CMakelist.txt?

Глядя на примеры gitmodel Cmakelist и auth Cmakelist, должно быть достаточно добавить wtdbo а также wtdbosqlite3 до TARGET_LINK_LIBRARIES.

user@debiam:~$ cat /usr/lib/Wt/examples/gitmodel/CMakeLists.txt
IF(NOT WIN32)

IF(BOOST_FS_LIB)
WT_ADD_EXAMPLE(gitview.wt
Git.C
GitModel.C
../wt-homepage/SourceView.C
GitView.C
)
TARGET_LINK_LIBRARIES(gitview.wt ${BOOST_FS_LIB} ${BOOST_SIGNALS_LIB} ${BOOST_SYSTEM_LIB})

INCLUDE_DIRECTORIES(
${WT_SOURCE_DIR}/src
)

ADD_DEPENDENCIES(gitview.wt wt ${EXAMPLES_CONNECTOR})

ELSE(BOOST_FS_LIB)

MESSAGE(STATUS "** Not building gitmodel example: requires boost_filesystem library.")

ENDIF(BOOST_FS_LIB)

ELSE(NOT WIN32)

MESSAGE(STATUS "** Not building gitmodel example: uses POSIX calls not available on win32")

ENDIF(NOT WIN32)

.

user@debiam:~$ cat /usr/lib/Wt/examples/feature/auth1/CMakeLists.txt
WT_ADD_EXAMPLE(auth1.wt
Auth1.C
model/Session.C
model/User.C
)

TARGET_LINK_LIBRARIES(auth1.wt wtdbo wtdbosqlite3 ${BOOST_SIGNALS_LIB} ${BOOST_SYSTEM_LIB})

INCLUDE_DIRECTORIES(${WT_SOURCE_DIR}/src)
1

Другие решения

Похоже, вы не включили User.C в качестве исходного файла? Также Вы можете непреднамеренно покинуть

DBO_EXTERN_TEMPLATES(User);

в вашем заголовочном файле, не имея нигде соответствующего

DBO_INSTANTIATE_TEMPLATES(User);

Рекомендуемое решение: удалить все строки DBO_EXTERN_TEMPLATES (…).

0

По вопросам рекламы [email protected]