Я перехожу на компьютер с Windows, и мне нужно запустить мой Makefile, написанный на Linux, чтобы создать библиотеку.

    HEADER=/usr/include
    INCLUDEDIR=include
    LIB_NAME=libpce.so
    SO_NAME=$(LIB_NAME).3.2
    REAL_NAME=$(SO_NAME).5
    SHARED_LIB=bin/$(REAL_NAME)

    mkdir $(HEADER)/libpce
    cp $(INCLUDEDIR)/pce.h $(HEADER)/libpce
    chmod 644 $(HEADER)/libpce/pce.h
    cp $(SHARED_LIB) /usr/lib/
    ln -f -s $(SO_NAME) /usr/lib/$(LIB_NAME)
    chmod 644 /usr/lib/$(REAL_NAME)
    ldconfig

Результат запуска его через терминал cygwin в Windows дает ошибку, поскольку ldconfig не определен, поэтому я попытался запустить их без команды ldconfig в конце.

Затем, когда мне нужно запустить другой файл Makefile для компиляции моего кода с аргументом -lpce, он говорит, что -lpce не определен. Мне кажется, что ldconfig необходим, но я не могу запустить его в Windows.

Есть ли способ выполнить эту команду в Windows? Это проблема или потенциально может быть проблема с путями / usr / lib /?

0
StackUser 11 Окт 2019 в 16:41

2 ответа

Ваш make-файл полон специфичных для Linux команд и путей. Они не переводят 1: 1. Возможно, вы сможете разобраться с этим, но настоящее решение - не писать свои make-файлы вручную. Используйте систему сборки, например cmake, которая сгенерирует необходимые файлы сборки независимо от того, в какой системе вы находитесь.

Вы также не упоминаете, что вы настроили на своем компьютере с Windows. Windows по умолчанию не оборудована для компиляции кода C ++. Вам нужно что-то установить, будь то MS Build Инструменты, WSL, MinGW / MSYS2 или Cygwin.

Хотя, если присмотреться, фрагмент вашего make-файла - не что иное, как сценарий bash. Вероятно, это можно было бы преобразовать в сценарий PowerShell, если вы в конечном итоге останетесь в среде 100% Windows.

2
sweenish 11 Окт 2019 в 16:50
Я использую Cygwin для запуска этих команд, а затем использую g ++ для компиляции моего кода на C ++. Я взгляну на cmake или сценарий powershell, спасибо!
 – 
AnthonyL
11 Окт 2019 в 17:04
Я, должно быть, не обращал внимания на этот факт, моя беда.
 – 
sweenish
11 Окт 2019 в 17:21

ldconfig не требуется на cygwin.

-lpce не выполняет слово, потому что у вас есть libpce.so, но компоновщик ищет DLL. Решение - создать символическую ссылку:

ln -s libpce.so libpce.dll

Чтобы углубиться, взгляните на:

1
Benjamin T 11 Окт 2019 в 16:55
Я пробовал это, а также предоставленные ссылки, но все равно получаю сообщение об ошибке, что ld не может найти -lpce
 – 
AnthonyL
18 Окт 2019 в 12:37