компоновщик — Как сделать библиотеку в C ++, как STL

Я сделал свои собственные реализации многих функций STL, таких как Векторы, Списки, BST, Очередь, Стек и дал им все функции, которые есть в соответствующей библиотеке STL ….

Теперь я хочу использовать эту библиотеку

#include "myLibName.h"

Что я сделал :

g++ -o -c myLib myLib.cpp

Из этого я получил объектный файл …

Но когда я компилирую программы, я должен сам связать объектный файл …

Есть ли способ, которым я могу обойтись без ссылки … как iostream и другие библиотеки связаны автоматически.

Я знаю что ОБЩИЙ ОБЪЕКТ (например, libc.so в C) где все реализации хранятся в C ….
Если это решение, то как я могу сделать любой и используйте его как другие стандартные библиотеки в C ++, не связывая каждый раз объектный файл.

PS: после многих усилий я создал эти библиотеки сам … Теперь поражен на последнем этапе … Пожалуйста, помогите …

2

Решение

Чтобы сделать процесс сборки более чистым для больших проектов, в которых вам нужно связать несколько проектов, вы можете использовать Makefiles.
После этого вам нужно просто набрать make на терминале для компиляции и сборки всего проекта.

Другое решение заключается в следующем, хотя многие люди не рекомендуют его,

      header.h
class Foo
{
// some variable and method declarations.
}

header.h — ваш заголовочный файл, который будет содержать ваши объявления.

    implement.cpp // this is the implementation file
#include "header.h"// Now implement various methods you declared in your "header.h" file.

Implement.cpp — это ваш файл реализации, который содержит реализацию и определение статических членов.

    main.cpp
#include "header.cpp"// use your methods.

Теперь вам не нужно связывать ваши объектные файлы, просто сделайте g++ -Wall main.cpp

1

Другие решения

Вы не можете, если не собираетесь писать свой собственный набор инструментов. GCC связывает в своей среде выполнения и стандартной библиотеке, потому что это GCC и знает, что должен; он не будет волшебным образом делать то же самое с ваш библиотека.

Традиционно, либо сделайте вашу библиотеку только заголовочной, либо отправьте .a/.so/.dll для разработчиков, чтобы ссылаться на linktime. В последних двух случаях вам также необходимо отправить .so/.dll за пользователи связать во время выполнения.

4

Прежде всего, вы должны, вероятно, различать STL и Standard C++ Library.

Каждый компилятор поставляется со своей собственной реализацией Стандартной библиотеки, некоторые из которых (по крайней мере, в основном) совместимы (см. Clang ++ и g ++). Таким образом, по сути, вы можете изменить используемый вами компилятор.

Если ты пишешь реализации только для заголовков, тогда не нужно создавать библиотеку, и вы можете использовать ее без ссылок. Но в этом случае ваша работа должна распространяться как источник, а не как библиотека + заголовок.

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

1
По вопросам рекламы [email protected]