Отказ от ответственности: мне известны такие вопросы, как это и this, но ничего не помогло мне решить мою проблему.
Я пытаюсь скомпилировать более крупный проект, зависящий от пакета ROOT, и мне удалось воспроизвести ошибку, с которой я столкнулся, в минимальном примере:
test.cpp:
#include "Math/GenVector/GenVector_exception.h"
int main()
{
ROOT::Math::GenVector::Throw("foo");
}
скомпилировано с: g++ -lGenVector test.cpp
дает:
/tmp/ccq9A45m.o: In function `main':
test.cpp:(.text+0xc): undefined reference to `ROOT::Math::GenVector::Throw(char const*)'
collect2: error: ld returned 1 exit status
локализация libGenVector.so с помощью ld --verbose -lGenVector | grep "lib GenVector.so succeeded"
дает:
attempt to open //usr/local/lib/libGenVector.so succeeded
проверка, определен ли символ в библиотеке с помощью nm -DgC --defined-only /usr/local/lib/libGenVector.so| grep Throw
, дает:
000000000003f180 T ROOT::Math::Throw(ROOT::Math::GenVector_exception&)
000000000003f1e0 T ROOT::Math::GenVector::Throw(char const*)
Основываясь на ответе на этот вопрос, я также попытался для компиляции с -std=c++11
и -std=c++14
и -std=c++17
, но все выдает одно и то же сообщение об ошибке.
A
зависят от библиотекиB
, тоA
должно стоять передB
в командной строке. - person Some programmer dude   schedule 01.08.2018g++ test.cpp -lGenVector
работает! спасибо, @Someprogrammerdude, если вы напишете это как ответ, я приму это. - person Przemysław Czechowski   schedule 01.08.2018root-config --cflags
, а не угадывал-std=c++1?
- я ожидаю, что проблемы возникнут, как только вы создадите проекты в зависимости от корня с другой стандартной версией С++, чем та, с которой был создан один корень. - person pseyfert   schedule 01.08.2018