Библиотека Linking C с нестандартным именем

Я использую gcc для компиляции программы, которую я должен связать с библиотекой C с нестандартным именем; это называют stuff.a вместо libstuff.a.

Я не могу изменить имя файла (проблемы разрешения).

Я не хочу включать полную библиотеку (т.е. использование gcc program.c stuff.a -oprogram)

Я хочу скомпилировать как gcc program.c -L/path/to/library/ -lstuff -oprogram но gcc не найдет библиотеку (потому что это не называют libstuff.a).

Я работаю над полем Linux.

Как я мог сделать (динамическое) соединение?

Править:

Спасибо всем и мои извинения за плохо сформулированный вопрос.

У меня даже не было общего объекта (я думал, что мог связаться динамично с *.a файлом), таким образом, это смутило многих из Вас. Снова, извинения за мое незнание.

То, что я закончил тем, что делал, создает общий объект в локальном каталоге, добавляя местоположение к моей переменной среды LD_LIBRARY_PATH, и связываясь снова.

Это работает как очарование (от 1.3M исполняемый файл вниз к 5.8K).

Еще раз спасибо.

7
задан Escualo 21 January 2010 в 19:40
поделиться

5 ответов

Вы не можете сделать это в одном запросе в Django. Вы можете получить клиента только с датой их самой последней покупки, как это:

from django.db.models import Max
customers = Customer.objects.annotate(Max('purchase__date'))

, но вы автоматически не получаете доступ к фактической покупке таким образом.

-121--3713338-

Предполагая, что общая версия статической библиотеки не существует, может потребоваться создать одну. Помните, что статический библиотечный материал. Это просто архив AR.

ar -x stuff.a
gcc -shared *.o -o libstuff.so

Это предполагает, что вы хотите , чтобы связать его в качестве общей библиотеки и не просто компилировать его в свой двоичный.

7
ответ дан 6 December 2019 в 07:26
поделиться

Можете ли вы создать символическую ссылку на . A называется libStuff.a ? Вы можете даже сделать SymLink в другом каталоге (I.E., а не стандартный каталог библиотеки) и использовать опцию -L с GCC , чтобы включить каталог с помощью SymLink.

4
ответ дан 6 December 2019 в 07:26
поделиться

Другой способ взглянуть на проблему - это уметь игнорировать различия в версии Ruby, которую вы запускаете. Мой backports gem приводит Ruby 1,8,6 в актуальное состояние в строке 1,8 .x (включая предстоящий 1,8,8) и большую часть 1,9:

require "backports"

Или вместо этого, для менее мужественных среди нас, вы можете потребовать только 1,8 .7 функций:

require "backports/1.8.7"
-121--4268549-

Это на самом деле все основано на isCase. Groovy добавляет метод isCase в Collections , основанный на методе contains. Любой класс с isCase может использоваться в.

-121--2702167-

свяжите его так, как будто вам нужен файл объекта:

gcc blah.o /usr/local/lib/foo.a -o binary

, если вам не нравится полный путь, просто используйте переменную. в противном случае можно было бы проанализировать LD_Library_Path и проверить файл на наличие

3
ответ дан 6 December 2019 в 07:26
поделиться

Вы должны были взглянуть на руководство GCC :

. Единственная разница между использованием -L опция и указание имени файла состоит в том, что -L окружает библиотеку с 'lib' и '.a' и ищет несколько каталоги.

Нет ничего плохого в использовании . как аргумент.

8
ответ дан 6 December 2019 в 07:26
поделиться

Просто дайте полное имя:

gcc program.c /path/to/library/stuff.a -oprogram
1
ответ дан 6 December 2019 в 07:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: