Создание проекта, от Make-файла до статических/динамичных библиотек в UNIX

Другое решение, использующее Linq и рекурсию ...

static void Main(string[] args)
    {
        List<List<long>> result = new List<List<long>>();

        List<long> set = new List<long>() { 1, 2, 3, 4 };

        GetCombination<long>(set, result);

        result.Add(set);

        IOrderedEnumerable<List<long>> sorted = result.OrderByDescending(s => s.Count);

        sorted.ToList().ForEach(l => { l.ForEach(l1 => Console.Write(l1 + " ")); Console.WriteLine(); });
    }

    private static void GetCombination<T>(List<T> set, List<List<T>> result)
    {
        for (int i = 0; i < set.Count; i++)
        {
            List<T> temp = new List<T>(set.Where((s, index) => index != i));

            if (temp.Count > 0 && !result.Where(l => l.Count == temp.Count).Any(l => l.SequenceEqual(temp)))
            {
                result.Add(temp);

                GetCombination<T>(temp, result);
            }
        }
    }
17
задан 1 March 2009 в 07:05
поделиться

6 ответов

Статические библиотеки обычно , заархивировал с эти ar команда. Как только Вы создаете все объектные файлы (предпочтительно с эти -fPIC, включают GCC), можно работать ar как так:

ar -rs archivename.a list.o of.o objects.o

man страница описывает опции.

библиотеки Dynamic обычно создаются с эти -shared переключатель к gcc или ld и имя выходного файла с .so расширение.

Автоинструменты обрабатывает это с libtool программа. Я не знаком с его использованием.

Соединение против этих библиотек может быть сделано любой путем списка библиотек с -l (эль) переключатель (такой как [1 111] для соединения с [1 112]) или путем определения их непосредственно с полными путями (такими как добавление /usr/lib/libX.so к команде). Статические библиотеки связаны путем определения -static прежде -l или соответствующий полный путь к эти .a архив.

15
ответ дан 30 November 2019 в 12:58
поделиться

Make-файл скелета для создания статической библиотеки, состоящей из кода в foo.cpp, bar.cpp:

PROJECT = library.a
OBJECTS = foo.o bar.o
CFLAGS  = -Wall -pedantic

all: $(PROJECT)

.cpp.o:
        g++ -c $(CFLAGS) $<

$(PROJECT): $(OBJECTS)
        libtool -o $(PROJECT) -static $(OBJECTS)

Make-файл скелета для приложения baz.cpp, что статические ссылки на library.a:

PROJECT = baz
CFLAGS  = -Wall -pedantic
OBJECTS = baz.o

all: $(PROJECT)

.cpp.o:
        g++ -c $(CFLAGS) $<

$(PROJECT): $(OBJECTS) library.a
        g++ $(OBJECTS) -L. -llibrary -o $(PROJECT)

Динамическая покинутая библиотека, гм, как осуществление читателю.

11
ответ дан 30 November 2019 в 12:58
поделиться

Ответ 1: Для создания статической библиотеки из исходных файлов foo.c и bar.c сделайте это:

gcc -c foo.c
gcc -c bar.c
ar rc mylibrary.a foo.o bar.o

Для получения дополнительной информации об этом, читайте руководство руководства GCC, чтобы изучить, как использовать компилятор и компоновщика с помощью компилятора. binutils руководство должно также быть полезным.

Ответ 2: GNU Делает руководство , довольно хорошо. Для реального приобретения знаний о библиотеках и как они работают читайте эти Компоновщики и Загрузчики книга John R. Levine.

библиотеки Static довольно просты, но совместно использованные библиотеки могут быть очень волосатыми, в зависимости от платформы и суммы мобильности, которую Вы хотите и нуждаетесь. Как пример, в некоторых системах статические и общие библиотеки должны быть скомпилированы с различными вариантами для работы правильно (каждый должен, и другой не должен быть скомпилирован с положением независимый код). Целые платформы утилит были разработаны для создания этого более легкого (libtool), но они весьма проблематичны сами.

2
ответ дан 30 November 2019 в 12:58
поделиться

Так как Вы обращаетесь к gcc, я предполагаю, что Вы используете GNU, Делают. Лучшая документация, которую я нашел для этого, официальное руководство , которое касается всего, что необходимо знать в легких для понимания терминах.

0
ответ дан 30 November 2019 в 12:58
поделиться

Когда я узнавал о программировании Linux, , Усовершенствованное Программирование Linux помогло мне много. Можно проверить раздел Writing и Using Libraries в этот pdf. Это объясняет вполне немного о библиотеках в Linux.

0
ответ дан 30 November 2019 в 12:58
поделиться

вы можете захотеть посмотрите и на это: http://www.faqs.org/docs/Linux-HOWTO/Program-Library-HOWTO.html

-1
ответ дан 30 November 2019 в 12:58
поделиться
Другие вопросы по тегам:

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