Допустим, я хочу использовать функцию mnemonic_generate из https: / /github.com/trezor/trezor-crypto/blob/master/bip39.c в моем коде (на самом деле я хочу использовать многие другие из репозитория, но давайте просто рассмотрим это). Я клонировал репо в своей системе. Я могу сделать, и это работает. Но у меня есть отдельный файл .c, в котором есть #include"relative/path/to/bip39.c", и я пытаюсь вызвать mnemonic_generate, но он выдает много ошибок типа undefined reference to 'X' (например, undefined reference to random_buffer и скоро). Я понимаю, что этот файл, в свою очередь, пытается включить другие файлы, которые могут содержать определения этих неопределенных вещей, но по какой-то причине они не включаются. Почему так происходит и как это исправить?

Основная причина, по которой я был сбит с толку, заключалась в том, что я не знал (ну, я изучал, но не осознавал) разницы между компиляцией и компоновкой. Я также не знал, что такое Makefile и зачем он нам нужен. Вот как я закончил Решить это

c
-1
Orwell 16 Ноя 2019 в 21:10

1 ответ

Лучший ответ

Вы не можете просто # включить один файл .c из такого сложного проекта и ожидать, что он заработает. Жизнь не так проста.

Вместо этого файл readme.md для этого проекта указывает, что это библиотека, поэтому вам необходимо связать эту библиотеку (которую, по вашему мнению, вы уже создали) и # включить соответствующий .h файлы в вашем приложении, где бы вы ни хотели вызывать функции в библиотеке.

2
Paul Sanders 16 Ноя 2019 в 18:19