Почему Go не может обнаружить файл tdjson.dll?

Здравствуйте! Я недавно начал работать с Go и TDLib. Я собрал TDLib из исходных кодов и разместил файлы tdjson.dll и tdjson.lib в каталоге с main.go, но программа не распознаёт эту библиотеку. Я написал небольшой тестовый код: <br/> <pre><code class="go">package main

import "syscall"

func main() {
	dll := syscall.NewLazyDLL("tdjson.dll")
	err := dll.Load()
	if err != nil {
		panic("E: " + err.Error())
	}
	println("Success")
}</code></pre> <br/> Убедитесь, что эти файлы также добавлены в переменную окружения PATH. Как можно решить эту проблему?
  • 24 марта 2025 г. 13:14
Ответы на вопрос 2
Если ваша программа на Go не может обнаружить библиотеку `tdjson.dll`, существует несколько возможных причин и решений, которые могут помочь вам разобраться с этой проблемой.

1. **Проверка местоположения файла**: Убедитесь, что файл `tdjson.dll` действительно находится в том же каталоге, где вы запускаете `main.go`. Вы можете использовать команду `os.Getwd()` для печати текущего рабочего каталога и убедиться, что файл находится там.

2. **Переменная окружения PATH**: Если вы добавили каталог, содержащий `tdjson.dll`, в переменную окружения `PATH`, убедитесь, что в новом сеансе терминала применены изменения. Иногда требуется перезагрузить терминал или перезагрузить компьютер, чтобы изменения в переменных окружения вступили в силу.

3. **Права доступа к файлу**: Проверьте, есть ли достаточные права доступа к библиотеке. Убедитесь, что вы можете открыть `tdjson.dll` вручную и что у вашей программы есть доступ к этому файлу.

4. **32-битная и 64-битная архитектура**: Проверьте, что архитектура вашей Go-программы (32-битная или 64-битная) соответствует архитектуре используемой библиотеки `tdjson.dll`. Если ваша программа скомпилирована для 64-битной системы, вам нужно использовать 64-битную версию здания DLL. Если это 32-битная версия, ваша Go-программа также должна быть 32-битной.

5. **Отладка ошибок загрузки**: В вашем коде вы сначала загружаете DLL, а затем проверяете наличие ошибки. Если ошибка заключается в том, что библиотека не найдена, попробуйте использовать пути при загрузке DLL:

   ```go
   dll := syscall.NewLazyDLL("C:\\путь\\к\\tdjson.dll") // Укажите полный путь к DLL
   ```

6. **Зависимости DLL**: Убедитесь, что `tdjson.dll` не имеет никаких недостающих зависимостей, которые могут препятствовать её загрузке. Вы можете использовать утилиты, такие как `Dependency Walker` или `Process Monitor`, чтобы проверить зависимые библиотеки и их наличие на вашем компьютере.

Если вы выполните все вышеперечисленные шаги и все еще столкнетесь с проблемой, пожалуйста, укажите текст ошибки, которая происходит при выполнении вашей программы, чтобы можно было более точно диагностировать проблему.
Я попробовал, вывел success. 
Код из вопроса, файл отсюда . Ещё там были libtdjson.dylib , libtdjson.so (Похоже для Linux), td_api.tl .
Похожие вопросы