Topic: Ошибки при сборке PvPGN 1.99 на freebsd 10 при помощи clang
Добрый день!
Пытаюсь собрать pvpgn из репозитория по этой статье: harpywar.com/?a=articles&b=2 … mp;lang=ru
Скачал с github, набрал cmake, далее пытаюсь сделать make и получаю ошибку:
[ 9%] Building CXX object src/common/CMakeFiles/common.dir/bnethashconv.o
[ 9%] Building CXX object src/common/CMakeFiles/common.dir/bnethash.o
[ 10%] Building CXX object src/common/CMakeFiles/common.dir/bnettime.o
[ 10%] Building CXX object src/common/CMakeFiles/common.dir/bn_type.o
[ 11%] Building CXX object src/common/CMakeFiles/common.dir/conf.o
[ 11%] Building CXX object src/common/CMakeFiles/common.dir/d2char_checksum.o
[ 12%] Building CXX object src/common/CMakeFiles/common.dir/eventlog.o
[ 12%] Building CXX object src/common/CMakeFiles/common.dir/fdwatch.o
In file included from /root/pvpgn-1.9.9/pvpgn/src/common/fdwatch.cpp:29:
In file included from /root/pvpgn-1.9.9/pvpgn/src/common/fdwatch_select.h:31:
/root/pvpgn-1.9.9/pvpgn/src/common/fdwbackend.h:36:42: error: reference to type 'const std::string' (aka 'const
basic_string<char, char_traits<char>, allocator<char> >') could not bind to an lvalue of type 'const char [1]'
explicit InitError(const std::string& str = "")
^ ~~
/root/pvpgn-1.9.9/pvpgn/src/common/fdwbackend.h:36:42: note: passing argument to parameter 'str' here
1 error generated.
*** Error code 1
Не пойму, что ему не нравится в string& str = "", а главное, как это исправить.
Кусок кода вот:
namespace pvpgn
{
class FDWBackend
{
public:
class InitError :public std::runtime_error
{
public:
explicit InitError(const std::string& str = "") // !!! 36 строка
:std::runtime_error(str) {}
~InitError() throw() {}
};
explicit FDWBackend(int nfds_);
virtual ~FDWBackend() throw(); // !!! 42 строка
virtual int add(int idx, unsigned rw) = 0;
virtual int del(int idx) = 0;
virtual int watch(long timeout_msecs) = 0;
virtual void handle() = 0;
Пробовал и последнюю версию с github, и древнюю pvpgn-199.r577 - ошибка одна и та же.
У меня:
FreeBSD 10.0-RELEASE #0 r260789: Thu Jan 16 22:34:59 UTC 2014 root@snap.freebsd.org:/usr/obj/usr/src/sys/GENERIC amd64
Далее 2-й эксперимент:
Скачал pvpgn-199.r577 на старой ненужной тестовой freebsd и попробовал ее собрать:
FreeBSD 8.4-STABLE #0 r149M: Mon Jun 10 08:43:20 UTC 2013 root@freebsd8-amd64-build.ispsystem.net:/root/src/sys/amd64/compile/DEBUG amd64
Там файл успешно скомпилировался.
Лог cmake там и там различается вот этим:
# diff ckflog_this /cmklog
1,2c1,2
< -- The C compiler identification is Clang 3.3.0
< -- The CXX compiler identification is Clang 3.3.0
---
> -- The C compiler identification is GNU 4.2.1
> -- The CXX compiler identification is GNU 4.2.1
36c36
< -- Looking for C++ include sys/timeb.h - found
---
> -- Looking for C++ include sys/timeb.h - not found
243c243
< -- Build files have been written to: /root/pvpgn-1.9.9/pvpgn-199.r577
---
> -- Build files have been written to: /root/pvpgn/pvpgn-199.r577
Там где "timeb.h - found" и "The C compiler" - это новый сервер.
Добавлено: 26.09.2014 23:41
Разобрался!
Оказалось, во FreeBSD 10 какой-то компилятор по умолчанию - то ли кривой, то ли урезанный.
Я сейчас поставил из портов /usr/ports/lang/gcc
Она поставилась версии 47, причем с окончанием 47 после каждого файла.
Далее, команду cmake запустил с дополнительным параметром:
cmake -D CMAKE_CXX_COMPILER=/usr/local/bin/c++47 -D CMAKE_INSTALL_PREFIX=/usr/local/pvpgn199 -D WITH_MYSQL=true ../
Сам этот параметр CMAKE_CXX_COMPILER я подсмотрел командой "ccmake ." в каталоге проекта.
До этого оно использовало /usr/bin/CC, который выдавал эту самую ошибку.
Чтобы cmake корректно пересоздал Makefile-ы после прошлых запусков cmake, пришлось удалить весь проект и скачать заново.
Примечательно, что в старой freebsd 8.4 - вообще "ccmake ." не выдавал параметра CMAKE_CXX_COMPILER.
Но для компиляции использовал /usr/bin/CC. Который там работал нормально, не выдавая эту невнятную ошибку на пустом месте.
Вот такая она - freebsd с ее жесткими стандартами...