Другое решение, использующее 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);
}
}
}
Статические библиотеки обычно , заархивировал с эти 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
архив.
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)
Динамическая покинутая библиотека, гм, как осуществление читателю.
Ответ 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), но они весьма проблематичны сами.
Так как Вы обращаетесь к gcc, я предполагаю, что Вы используете GNU, Делают. Лучшая документация, которую я нашел для этого, официальное руководство , которое касается всего, что необходимо знать в легких для понимания терминах.
Когда я узнавал о программировании Linux, , Усовершенствованное Программирование Linux помогло мне много. Можно проверить раздел Writing и Using Libraries в этот pdf. Это объясняет вполне немного о библиотеках в Linux.
вы можете захотеть посмотрите и на это: http://www.faqs.org/docs/Linux-HOWTO/Program-Library-HOWTO.html