Я использую 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).
Еще раз спасибо.
Вы не можете сделать это в одном запросе в 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
Это предполагает, что вы хотите , чтобы связать его в качестве общей библиотеки и не просто компилировать его в свой двоичный.
Можете ли вы создать символическую ссылку на . A
называется libStuff.a
? Вы можете даже сделать SymLink в другом каталоге (I.E., а не стандартный каталог библиотеки) и использовать опцию -L
с GCC
, чтобы включить каталог с помощью SymLink.
Другой способ взглянуть на проблему - это уметь игнорировать различия в версии 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 и проверить файл на наличие
Вы должны были взглянуть на руководство GCC :
. Единственная разница между использованием -L опция и указание имени файла состоит в том, что
-L
окружает библиотеку с 'lib' и '.a' и ищет несколько каталоги.
Нет ничего плохого в использовании .
как аргумент.
Просто дайте полное имя:
gcc program.c /path/to/library/stuff.a -oprogram