Я сделал свои собственные реализации многих функций STL, таких как Векторы, Списки, BST, Очередь, Стек и дал им все функции, которые есть в соответствующей библиотеке STL ….
Теперь я хочу использовать эту библиотеку
#include "myLibName.h"
Что я сделал :
g++ -o -c myLib myLib.cpp
Из этого я получил объектный файл …
Но когда я компилирую программы, я должен сам связать объектный файл …
Есть ли способ, которым я могу обойтись без ссылки … как iostream
и другие библиотеки связаны автоматически.
Я знаю что ОБЩИЙ ОБЪЕКТ (например, libc.so в C) где все реализации хранятся в C ….
Если это решение, то как я могу сделать любой и используйте его как другие стандартные библиотеки в C ++, не связывая каждый раз объектный файл.
PS: после многих усилий я создал эти библиотеки сам … Теперь поражен на последнем этапе … Пожалуйста, помогите …
Чтобы сделать процесс сборки более чистым для больших проектов, в которых вам нужно связать несколько проектов, вы можете использовать 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
Вы не можете, если не собираетесь писать свой собственный набор инструментов. GCC связывает в своей среде выполнения и стандартной библиотеке, потому что это GCC и знает, что должен; он не будет волшебным образом делать то же самое с ваш библиотека.
Традиционно, либо сделайте вашу библиотеку только заголовочной, либо отправьте .a
/.so
/.dll
для разработчиков, чтобы ссылаться на linktime. В последних двух случаях вам также необходимо отправить .so
/.dll
за пользователи связать во время выполнения.
Прежде всего, вы должны, вероятно, различать STL и Standard C++ Library
.
Каждый компилятор поставляется со своей собственной реализацией Стандартной библиотеки, некоторые из которых (по крайней мере, в основном) совместимы (см. Clang ++ и g ++). Таким образом, по сути, вы можете изменить используемый вами компилятор.
Если ты пишешь реализации только для заголовков, тогда не нужно создавать библиотеку, и вы можете использовать ее без ссылок. Но в этом случае ваша работа должна распространяться как источник, а не как библиотека + заголовок.
Если вы хотите просто распространять свою библиотеку и не против связать ее с общей или статической библиотекой, которую вы распространяли, вам следует создать общую или статическую библиотеку, в зависимости от ситуации. Но вам придется связать его, когда он используется.