Порядок, в котором связаны библиотеки, имеет значение, если библиотеки зависят друг от друга. В общем случае, если библиотека A
зависит от библиотеки B
, тогда libA
ДОЛЖЕН появляться перед libB
в флагах компоновщика.
Например:
// B.h
#ifndef B_H
#define B_H
struct B {
B(int);
int x;
};
#endif
// B.cpp
#include "B.h"
B::B(int xx) : x(xx) {}
// A.h
#include "B.h"
struct A {
A(int x);
B b;
};
// A.cpp
#include "A.h"
A::A(int x) : b(x) {}
// main.cpp
#include "A.h"
int main() {
A a(5);
return 0;
};
Создайте библиотеки:
$ g++ -c A.cpp
$ g++ -c B.cpp
$ ar rvs libA.a A.o
ar: creating libA.a
a - A.o
$ ar rvs libB.a B.o
ar: creating libB.a
a - B.o
Скомпилируйте:
$ g++ main.cpp -L. -lB -lA
./libA.a(A.o): In function `A::A(int)':
A.cpp:(.text+0x1c): undefined reference to `B::B(int)'
collect2: error: ld returned 1 exit status
$ g++ main.cpp -L. -lA -lB
$ ./a.out
Чтобы повторить снова, порядок имеет значение!
Теперь вы можете импортировать библиотеку Java из репо GitHub с помощью JitPack . В вашем pom.xml:
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
<dependency>
<groupId>com.github.User</groupId>
<artifactId>Repo name</artifactId>
<version>Release tag</version>
</dependency>
Это работает, потому что JitPack проверит код и построит его. Таким образом, вы в конечном итоге загрузите банку. Если проект не имеет выпуска GitHub, тогда его можно использовать идентификатор фиксации в качестве версии.
На данный момент вы не можете сделать это, если разработчик библиотеки не предоставил способ сделать это.
Итак, на титульной странице библиотеки должна быть инструкция, содержащая репозиторий адрес:
<repositories>
<repository>
<id>YOUR-PROJECT-NAME-mvn-repo</id>
<url>https://raw.github.com/YOUR-USERNAME/YOUR-PROJECT-NAME/mvn-repo/</url>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
И имя зависимостей:
<dependency>
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
</dependency>
Это означает, что в этом репо будет поиск всех артефактов вашего проекта, включая вашу зависимость.
Вы также можете взглянуть на pom.xml
, чтобы проверить, были ли предприняты попытки развернуть артефакты для удаленного репо. Обычно ключевыми словами являются oss.sonatype.org или raw.github.com , как в этом случае.
FYI, вот способ предоставить репо для вашего артефакта gihub: Хостинг репозитория Maven на github .
Еще одна очень приятная вещь о Jitpack , у нее есть кнопка поиска на главной странице. И если вы наберете URL своего репозитория GitHub, он отобразит различные коммиты исходного кода, и вы можете выбрать, какой фиксатор / тег вы хотите. Jitpack создает зависимости pom для вас.
Он стал мертвым простым.