2014-11-20 2 views
0

все.gcc-4.8.2 не связывает pthread

Компиляция простых вещей с использованием gcc toolchain в течение нескольких лет, сегодня я столкнулся с любопытным явлением.

Я установил Kubuntu 14.04 на обычный настольный компьютер i686 с gcc 4.8.2 в нем. Но затем, пытаясь построить некоторые хорошо закодированные материалы, вытащенные из моего локального хранилища, я столкнулся с тоннами сообщений «неопределенной ссылки на». Код компилируется, ссылки и работает хорошо под Ubuntu 11.04/gcc 4.5.2. Я проверил процесс связывания (на -Wl, - verbose to gcc), подумайте, что это работает. Он находит все библиотеки, которые я указываю в команде link. objdump -t myLib.so содержит именно те символы, которые я ожидал бы - но компоновщик их не видит.
Проверка библиотеки pthread также содержит соответствующие символы, за исключением того, что они имеют суффикс @GLIBC .... До сих пор не проверял уловные ссылки/загрузчика.

Образец как

#include <stdio.h> 
#include <unistd.h> 
#include <pthread.h> 

static void *fooo (void *xxx) { 
    char *txt = (char*)xxx; 
    printf("My job is to print this :'%s'. Bye now!\n", txt); 
    return 0; 
} 
int main (int argc, char *argv[]) { 
    pthread_t thd; 
    pthread_create(&thd, NULL, fooo, "A POSIX thread"); 
    sleep(1); 
    return 0; 
} 

работает очень хорошо на старой системе просто говоря

НКУ -l fooo.c потоковой & & ./a.out

но прерывается на этапе соединения с 4.8.2.
Любая идея была бы очень желанной.

оГО

+0

Можете ли вы добавить сообщение об ошибке – sfrehse

+2

возможного дубликат [порядка Linker - GCC] (http://stackoverflow.com/questions/45135/linker-order-gcc) –

+0

@JoachimPileborg Я предполагаю, что с тех пор, как только библиотека связана с программой. Нам определенно нужно точное сообщение об ошибке. – sfrehse

ответ

1

Благодаря sfrehse, JoachimPileborg и др!

Действительно, успех зависит от порядка аргументов. Я знал этот факт для статической привязки, но он является новым в обработке общих объектов с помощью gcc.

Кто-нибудь знает, что на этом фоне улучшение есть? Он разбивает бесчисленные процессы сборки, и я предполагаю, что тысячи помидор делаются готовы к gcc.gnu.org .....

оГО

+0

Сохраните свои помидоры, это свойство компоновщика, а не GCC, и технически это [всегда] (http://c-faq.com/lib/libsearch.html) потребовалось, в некоторых случаях это случилось в прошлом. –

+0

@Jonathan Неправильно. Это определенно _NOT_ всегда требуется. Смотрите мой первоначальный пост, пожалуйста. Вы увидите, что этот эффект повысился где-то между 4.5.2 и 4.8.2. И даже в древних версиях - я тоже бегу 4.1.2 - материал очень хорош. Спасибо за ваш намек на работу компоновщика. – Mikes

+0

Как «я попробовал, и это сработало» доказывает, что я ошибаюсь, когда говорю «это просто случилось в прошлом»?Документация для компоновщика всегда указывала, что библиотеки ищутся один раз в том порядке, в котором они отображаются в командной строке. например еще [binutils 2.9.1] (http://ftp.gnu.org/old-gnu/Manuals/ld-2.9.1/html_node/ld_3.html), см. опцию '-l' –

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