Скомпилированный исполняемый файл CC \ GCC не может работать на моей машине? - PullRequest
1 голос
/ 04 июля 2019

Короче говоря, я хочу начать сторонний проект, и мне нужно сделать .exe моего кода.Мне удается, но всякий раз, когда я пытаюсь щелкнуть по нему, выдается ошибка:

Это приложение не может работать на вашем компьютере

Обычный терминал отлично выполняет исполняемый файл.

Я уже знаю, что это проблема ПУТИ, и я искал ответ уже пару дней.Я просто не знаю, в чем проблема PATH или как заставить %.exe включить его путь, чтобы он был кликабельным.

Я думаю, что проблема не в реальном коде, но я все еще буду включать снимокмоего Makefile здесь:

.Phony: all server dist clean

IDIR = include
CC ?= gcc
USERFLAGS+=
CLFLAGS += -I$(IDIR) -g -Wall -Wpedantic $(USERFLAGS) -std=c11 -Wno-format-extra-args

ODIR=obj
LDIR=lib
SRCDIR=src

LIBS=-lm


SRCS= $(wildcard $(SRCDIR)/*.c)
DEPS= $(wildcard $(ODIR)/*.o)
OBJ = $(patsubst $(SRCDIR)/%, $(ODIR)/%, $(SRCS:%.c=%.o))

all: server.exe

$(ODIR)/%.o: $(SRCDIR)/%.c
    @echo "Making objects..."
    mkdir -p $(ODIR)
    $(CC) -MMD $(CLFLAGS) -c -o $@ $<

server.exe: $(OBJ)
    @echo "Compiling..."
    $(CC) -o $@ $(OBJ) $(CFLAGS) $(LIBS)

Основное сообщение об ошибке в обычном режиме:

Это приложение не может работать на этом компьютере

Сообщение об ошибке вадминистративный режим:

Windows не может найти «[] / [] / server.exe», убедитесь, что вы правильно ввели имя.

А я просто не могузнать, где установить путь или как его автоматизировать, если это возможно.

Ответы [ 2 ]

0 голосов
/ 04 июля 2019

следующий предложенный Makefile:

  1. должен выдавать желаемый результат
  2. включает предупреждения, поэтому пользователь будет информирован о проблемах компиляции

иТеперь предлагаемый Makefile:

OBJDIR   := obj
LIBDIR   := lib
SRCDIR   := src
INCDIR   := include


NAME    := server.exe

SHELL   := /bin/sh
CC      := gcc
DEBUG   :=  -ggdb3

CFLAGS  :=  $(DEBUG) -Wall -Wextra -pedantic -Wconversion -std=c11
MAKE    :=  /usr/bin/make
CC      :=  /usr/bin/gcc
LFLAGS  :=  -L/usr/local/lib
LIBS    :=   -lm


.PHONY: all
all : $(NAME) 


#
# macro of all *.c files 
# (NOTE:
# (the following 'wildcard' will pick up ALL .c files in the source directory
SRC := $(wildcard $(SRCDIR)/*.c)
OBJ := $(SRC:.c=.o)
DEP := $(SRC:.c=.d)


#
# link the .o files into the executable 
# using the linker flags
# -- explicit rule
#
%(LIBDIR)/$(NAME): $(OBJDIR)/$(OBJ) 
    #
    # ======= $(NAME) Link Start =========
    @echo "linking into executable..."
    $(CC) -o $@ $^  $(LFLAGS) $(LIBS)
    # ======= $(NAME) Link Done ==========
    #

#
#create dependency files 
%.d: %.c 
    # 
    # ========= START $< TO $@ =========
    @echo "Making dependencies..."
    $(CC) -MMD $(CFLAGS) -c -o $@ $<
    # ========= END $< TO $@ =========

# 
# compile the .c file into .o files using the compiler flags
#
%.o: %.c %.d 
    # 
    # ========= START $< TO $@ =========
    @echo "Making objects..."
    $(CC) $(CFLAGS) -c $< -o $@ -I$(INCDIR)
    # ========= END $< TO $@ =========
    # 

.PHONY: clean
clean: 
    # ========== CLEANING UP ==========
    rm -f $(OBJDIR)/*.o
    rm -f $(name)
    rm -f *.d
    # ========== DONE ==========



# include the contents of all the .d files
# note: the .d files contain:
# <filename>.o:<filename>.c plus all the dependencies for that .c file 
# I.E. the #include'd header files
# wrap with ifneg... so will not rebuild *.d files when goal is 'clean'
#
ifneq "$(MAKECMDGOALS)" "clean"
-include $(DEP)
endif
0 голосов
/ 04 июля 2019

Объяснение, безусловно, заключается в том, что двоичный файл связан с библиотекой DLL в каталоге установки GCC.

Самый простой способ определить, с чем связан dll, с которым связан двоичный файл, - это сделать strings server.exe | find /i ".dll".

У вас нет файла strings.exe?Смотрите этот вопрос: https://superuser.com/questions/124081/is-there-a-windows-equivalent-of-the-unix-strings-command

...