【问题标题】:error compiling AEScrypt using mingW-w64 in windows在 Windows 中使用 mingW-w64 编译 AEScrypt 时出错
【发布时间】:2016-11-18 16:20:12
【问题描述】:

我下载了 AESCrypt 库以便使用 MingW 进行编译: https://github.com/paulej/AESCrypt/tree/master/Windows

我收到此错误消息:

C:\Users\MyPC\AppData\Local\Temp\cclSPvvW.o:aescrypt.c:(.text+0xa2): undefined re
ference to `sha256_starts(sha256_context*)'
C:\Users\MyPC\AppData\Local\Temp\cclSPvvW.o:aescrypt.c:(.text+0xc0): undefined re
ference to `sha256_update(sha256_context*, unsigned char*, unsigned long)'
C:\Users\MyPC\AppData\Local\Temp\cclSPvvW.o:aescrypt.c:(.text+0x815): undefined r
eference to `aes_encrypt(aes_context*, unsigned char*, unsigned char*)'
C:\Users\MyPC\AppData\Local\Temp\cclSPvvW.o:aescrypt.c:(.text+0x829): undefined r
eference to `sha256_update(sha256_context*, unsigned char*, unsigned long)'
C:/Program Files (x86)/mingw-w64/i686-6.1.0-posix-dwarf-rt_v5-rev1/mingw32/bin/.
./lib/gcc/i686-w64-mingw32/6.1.0/../../../../i686-w64-mingw32/lib/../lib/libming
w32.a(lib32_libmingw32_a-crt0_c.o):crt0_c.c:(.text.startup+0x39): undefined refe
rence to `WinMain@16'
collect2.exe: error: ld returned 1 exit status

我在Windows 7 x64,我正在使用MingW-w64 6.1.0

【问题讨论】:

  • 显示用于编译的命令
  • AES 使用大写字母

标签: c++ c windows mingw


【解决方案1】:

这种错误意味着您忘记链接包含丢失符号代码的文件。它通常是一个 .o 或 .lib/.a 文件。

在您的情况下,其中一个符号是:sha256_starts(sha256_context*),它可能在 sha256.o 中。检查实际的链接命令并确保它包含此文件或包含它的库。

这样的 makefile 应该可以解决问题:

COMP = gcc
RM = rm -f
OBJS = aes.o sha256.o stdafx.o AESCrypt.o AESCryptShellExt.o AESCryptWorkerThreads.o BufferedFile.o ErrorHandling.o PasswdDialog.o ProgressDialog.o
LDFLAGS = -mwindows
SERVERLDFLAGS =
TARGET = aes.exe

all : $(TARGET)

$(TARGET) : $(OBJS)
    $(COMP) $(LDFLAGS) $(DEBUGFLAGS) -o $(TARGET) $^

clean :
    $(RM) *.o

%.o : %.c %.h
    $(COMP) $(CFLAGS) -c $<

%.o : %.cpp %.h
    $(COMP) $(CFLAGS) -c $<

【讨论】:

  • 我在 Windows 上,不需要 .o 或 lib/,请查看 github 存储库,谢谢。
  • 链接错误意味着找不到 sha256_starts 和 sha256_update 的二进制代码。如果你查看 sha256.c,你会发现这些函数的实现。这意味着您必须编译 sha256.c 以生成 sha256.o,然后当您将文件链接在一起时,该文件必须与另一个 .o 一起包含才能获得可执行文件。
  • 如何使用 mingw 编译它?解决办法是什么?
  • gcc -c file.c 或 gcc -c file.cpp 生成file.o,然后 gcc -o target.exe *.o 链接程序(makefile 在编辑的初始帖子中)。你目前是如何编译的?
猜你喜欢
  • 2013-10-03
  • 2015-04-25
  • 1970-01-01
  • 2020-03-27
  • 1970-01-01
  • 2018-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多