Компиляция и компоновка C-программы для 32-битной архитектуры - PullRequest
0 голосов
/ 02 марта 2011

Итак, я работаю над заданием для курса Стэнфорда CS107 и не могу закончить компиляцию незаконченной программы (файлы проекта и оригинальный make-файл можно найти на странице курса , я работаю над заданием 4 RSS.)

После долгих исследований я думаю проблема в том, что я использую gcc на 64-битной архитектуре (Mac OS 10.6)а предварительно скомпилированный библиотечный код в assn-4-rss-news-search-lib/linux предназначен для 32-битной архитектуры.Я попытался настроить gcc для использования i386 и -m36, но ничего не работает, и я просто догадываюсь.

Итак, вот результат, который я получаю, когда запускаю make:

gcc  -g -Wall -std=gnu99 -Wno-unused-function    -c -o rss-news-search.o rss-news-search.c
gcc  rss-news-search.o -g -Wall -std=gnu99 -Wno-unused-function -g  -lnsl -lrssnews -L/Users/derp/Documents/OCW/CS107/Work/programming4/assn-4-rss-news-search-lib/linux -o rss-news-search
ld: library not found for -lnsl
collect2: ld returned 1 exit status
make: *** [rss-news-search] Error 1

Вот вывод, который я получаю, когда удаляю -lnsl, где упоминаются различия в архитектуре:

gcc  -g -Wall -std=gnu99 -Wno-unused-function    -c -o rss-news-search.o rss-news-search.c
gcc  rss-news-search.o -g -Wall -std=gnu99 -Wno-unused-function -g  -lrssnews -L/Users/derp/Documents/OCW/CS107/Work/programming4/assn-4-rss-news-search-lib/linux -o rss-news-search
ld: warning: in /Users/derp/Documents/OCW/CS107/Work/programming4/assn-4-rss-news-search-lib/linux/librssnews.a, file was built for unsupported file format which is not the architecture being linked (x86_64)
Undefined symbols:
    "_URLConnectionDispose", referenced from:
        _ProcessFeed in rss-news-search.o
        _ParseArticle in rss-news-search.o
    ... several more undefined symbols mentioned ...
ld: symbol(s) not found
collect2: ld returned 1 exit status
make: *** [rss-news-search] Error 1

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

Ответы [ 2 ]

2 голосов
/ 08 декабря 2012

В случае, если кто-то вроде меня будет искать ответ по прошествии этого времени ... Проблема легко решается установкой wubi-версии 32-битной Ubuntu.Он отлично работает на 64-битной системе.Вам нужно только отредактировать make-файл, чтобы он знал, где искать предоставленные библиотеки.

0 голосов
/ 02 марта 2011
  • Я почти уверен, что использование скомпилированной библиотеки для linux на macos, независимо от разрядности, не сработает (ну, возможно, возможно выполнить кросс-компиляцию на MacOS для Linux и, возможно, возможно)для запуска исполняемого файла Linux в окне совместимости в MacOS, но это совсем не то, что вы пытаетесь сделать).

  • libnsl - стандартная библиотека в Linux (она предоставляет некоторые функции, связанные с сетью)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...