2017-02-01 5 views
2

Я пытаюсь связать простую программу с boost_timer с помощью g ++. Программа выглядит следующим образом:Ошибка DSO при попытке установить связь с boost_timer

#include <iostream> 
#include <boost/timer/timer.hpp> 

void linear_sum(int n); 
void quadratic_sum(int n); 
void sigmatic_sum(int n); 

int main(int argc, char *argv[]) 
{ 
    int m[5] = {100, 1000, 10000, 100000, 1000000}; 
    int tmp = 0; 

    for(tmp; tmp < 5; tmp++){ 
    std::cout << "Timing information for linear sum with n = " << m[tmp] << ":\n"; 
    linear_sum(m[tmp]); 

    std::cout << "Timing information for quadratic_sum with n = " << m[tmp] << ":\n"; 
    quadratic_sum(m[tmp]); 

    std::cout << "Timing information for sigmatic_sum with n = " << m[tmp] << ":\n"; 
    } 
} 

Я попытался скомпилировать программу с:

g++ -o a1main a1main.cpp -lboost_timer 

boost_timer заголовка и библиотеки находятся в пути поиска компилятора по умолчанию. Я использую Slackware 14.2, который поставляется с boost и boost, скомпилированными библиотеками из коробки. Я также использую компилятор запаса, который поставляется с g ++. (Например, это не по индивидуальному заказу Набор инструментов или что-нибудь)

Я не уверен, что я не хватает, но я получаю следующее сообщение об ошибке при попытке компиляции:

/usr/lib64/gcc/x86_64-slackware-linux/5.3.0/../../../../x86_64-slackware-linux/bin/ld: /tmp/ccRDEN9Q.o: undefined reference to symbol _ZN5boost6system15system_categoryEv /usr/lib64/libboost_system.so.1.59.0: error adding symbols: DSO missing from command line collect2: error: ld returned 1 exit status

Мысли?

(ps) Я искал похожие проблемы. Были некоторые, но они были либо решены, добавив флаг компоновщика -lboost_timer, который я уже сделал, либо был решен путем изменения порядка нескольких флагов компоновщика благодаря связыванию зависимостей. Поскольку я связываюсь только с одной библиотекой, для меня нет круговых зависимостей до uncircle. Поэтому я задаю этот вопрос здесь, чтобы увидеть, есть ли что-то еще, что я могу попробовать.)

+2

Думаю, вам нужна '-lboost_system'. – Jonas

+0

Или '-DBOOST_SYSTEM_NO_DEPRECATED'. – Jonas

+0

Вы должны добавить -lboost_system, как @Jonas сказал – jamek

ответ

2

Вам нужно добавить -lboost_system в команду сборки. Когда вы используете boost_timer, вам может понадобиться boost_system. Это также касается многих других библиотек повышения, но не обязательно всех из них.

 Смежные вопросы

  • Нет связанных вопросов^_^