2013-04-04 5 views
1

Я написал программу, которая компилируется и работает как ожидалось (без проблем) в моем дистрибутиве Ubuntu 12.10 дома. Затем я передаю свою программу на моем университетском сервере, где я впервые встретился с ошибкой (аналогично this question)Возможная ошибка компоновщика при выполнении программы на внешнем Unix-машине

/usr/lib/libstdc++.so.6: version 'GLIBCXX_3.4.9' not found (required by ./main)

Как было предложено в теме, я затем добавил -static-libstdc++ в настройках линкера, так что я используйте статическое связывание. Теперь я получаю ошибку

undefined symbol: _ZNSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE

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

+0

Почему бы не попробовать явное динамическое связывание? –

+0

@ bash.d Спасибо за предложение. Как я могу сказать моему компилятору, что я хочу этого? – BillyJean

+0

Обычно это происходит автоматически; кажется, что целевая машина не имеет той же библиотеки, что и вы. Возможно, [this] (http://frigidcode.com/articles/gcc-mixed-static-and-dynamic-linking.shtml) помогает вам –

ответ

1

Это довольно стандартный пример компиляции с одной версией библиотеки времени выполнения C и попытки ее запуска против другого. Статическая компиляция должна помочь.

+0

Я попытался добавить '-статический', и теперь я получаю ошибку' FATAL: Ядро слишком старое .. segmentation fault' – BillyJean

+1

Боюсь, вам нужно будет соответствовать вашей университетской среде сервера на вашем ubuntu машину и скомпилировать ее, чтобы она работала. Убедитесь, что архитектура совместима (32 - 64-разрядная). Не проще ли было бы переносить код на университетский компьютер и строить его там? – metalhead

+0

Я использую библиотеку Boost на своей машине Ubuntu дома. Я очень сомневаюсь, что университетский сервер имеет это :-(. Означает ли это, что университетскому серверу также необходимо запустить Ubuntu 12.10, чтобы это работало? Или это что-то, связанное только с библиотеками C++? – BillyJean

1

Добавляли ли вы статичность при строительстве?

+0

Единственное, что я сделал, это добавить '-static-libstdC++' в компоновщик настройки моей IDE (CodeBlocks) – BillyJean

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