Ошибка компиляции Caffe: gflags.cc ‘статически и динамически связан с этим исполняемым файлом

Я пытаюсь установить caffe после этого руководство

В основном у меня следующая ошибка при вводе последней команды make:

me@dl-01:/home/me/caffe-master$ make runtest

.build_release/tools/caffe

caffe: command line brew

usage: caffe command args

commands:

train           train or finetune a model

test            score a model

device_query    show GPU diagnostic information

time            benchmark model execution time

Flags from tools/caffe.cpp:
-gpu (Run in GPU mode on given device ID.) type: int32 default: -1
-iterations (The number of iterations to run.) type: int32 default: 50
-model (The model definition protocol buffer text file..) type: string
default: ""-snapshot (Optional; the snapshot solver state to resume training.)
type: string default: ""-solver (The solver definition protocol buffer text file.) type: string
default: ""-weights (Optional; the pretrained weights to initialize finetuning. Cannot
be set simultaneously with snapshot.) type: string default: "".build_release/test/test_all.testbin 0 --gtest_shuffle
ERROR: something wrong with flag 'flagfile' in file '/root/glog-0.3.3/gflags-master/src/gflags.cc'.  One possibility: file '/root/glog-0.3.3/gflags-master/src/gflags.cc' is being linked both statically and dynamically into this executable.
make: *** [runtest] Error 1

Я не понимаю, как решить эту ошибку. Кто-нибудь нашел эту ошибку раньше? как я могу решить это?

3

Решение

Независимо от того, решили ли вы это где-то еще, я выкладываю ответ здесь на тот случай, если другие столкнутся с той же проблемой.

В первую очередь эта проблема возникла, потому что мы не всегда читаем вещи правильно и слепо следуйте всем инструкциям, думая, что все они применимы к нашему делу. подсказка: они не

В инструкциях по установке для Caffe (в предположении инструкций Ubuntu) есть раздел, в котором говорится:

Все упаковано в 14.04.

sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler

Слепо игнорируя следующий заголовок, в котором четко сказано:

Оставшиеся зависимости, 12.04

мы продолжаем устанавливать эти зависимости, собирая и устанавливая их по мере необходимости, что приводит к нежелательному побочному эффекту наличия двух версий libgflags, одной динамической (в /usr/lib[/x86_x64] и один статический в /usr/local/lib

разрешение

  1. Пообещайте себе, что мы не сможем правильно прочитать инструкции в следующий раз.
  2. Удалить libgflags

    sudo apt-get remove -y libgflags
    
  3. удалять make install версии

    sudo rm -f /usr/local/lib/libgflags.a /usr/local/lib/libgflags_nothreads.a
    sudo rm -rf  /usr/local/include/gflags
    
  4. Чистый Кафе построить

    cd <path>/<to>/caffe
    make clean
    
  5. Переустановите пакет libgflags

    sudo apt-get install -y libgflags-dev
    
  6. Перестроить Кафе

    make all
    make test
    make runtest
    

И вуаля. Все тесты теперь должны быть выполнены, и вы готовы раскачивать лодку с глубоким обучением.

10

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

У меня также были установлены две библиотеки: общая библиотека .so и статическая библиотека .a. Я удалил их все, а также папку / usr / local / include / glog.
Файл .so, который я перенес, когда я (перекрестно) собирал систему, в то время как файл .a был из собственной и самой современной сборки.
В конечном итоге все сводилось к созданию glog (изначально) таким образом, что он предоставил файлы .so.
Я начал с чистой загрузки:

git clone git://github.com/google/glog

Затем я отредактировал CMakeLists.txt.
Где это говорит:

add_library (glog
${GLOG_SRCS}
)

Я изменил это на:

add_library (glog SHARED
${GLOG_SRCS}
)

Далее вы должны быть в состоянии следовать другим инструкциям. Для моего конкретного случая мне пришлось использовать немного другие инструкции, не говоря уже о том, что вы должны это делать. Для меня это было:
mkdir build
сборка компакт-диска

export CXXFLAGS="-fPIC"cmake ..
make
sudo make install

Это дало мне файлы .so и поместило их в нужное место. Затем я начал с кофе, и это исправило ошибку для меня.

1