weidai11 / cryptopp

free C++ class library of cryptographic schemes
https://cryptopp.com
Other
4.87k stars 1.51k forks source link

Issue while compiling library when IOS_SDK=iPhoneSimulator #1021

Closed akashnagapure closed 3 years ago

akashnagapure commented 3 years ago

I am trying to compile library for iOS as mentioned on link https://www.cryptopp.com/wiki/IOS_(Command_Line)

It works as expected when I use IOS_SDK=iPhoneOS IOS_CPU=arm64 source ./setenv-ios.sh, but when I try to build for simulator as well as for armv7 then it gives error

$ IOS_SDK=iPhoneSimulator IOS_CPU=i386 source TestScripts/setenv-ios.sh 
Configuring for iPhoneSimulator (i386)
XCODE_TOOLCHAIN: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/
IOS_SDK: iPhoneSimulator
IOS_CPU: i386
IOS_SYSROOT: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator14.4.sdk
IOS_CXXFLAGS: -arch i386 -miphonesimulator-version-min=6 -DCRYPTOPP_DISABLE_ASM

*******************************************************************************
It looks the the environment is set correctly. Your next step is build
the library with 'make -f GNUmakefile-cross'.
*******************************************************************************

make -f GNUmakefile-cross
Here's what we found... IS_X86: 1, IS_X64: 0, IS_ARM32: 0, IS_ARMV8: 0
...

clang++ -o cryptest.exe -DNDEBUG -g2 -O3 -fPIC -pipe -Wall -arch i386 -miphonesi
mulator-version-min=6 -DCRYPTOPP_DISABLE_ASM -stdlib=libc++ --sysroot "/Applicat
ions/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/S
DKs/iPhoneSimulator14.4.sdk" adhoc.o test.o bench1.o bench2.o bench3.o datatest.
o dlltest.o fipsalgt.o validat0.o validat1.o validat2.o validat3.o validat4.o va
lidat5.o validat6.o validat7.o validat8.o validat9.o validat10.o regtest1.o regt
est2.o regtest3.o regtest4.o ./libcryptopp.a

ld: warning: ignoring file adhoc.o, building for iOS Simulator-i386 but attempting to link with file built for unknown-arm64
ld: warning: ignoring file test.o, building for iOS Simulator-i386 but attempting to link with file built for unknown-arm64
ld: warning: ignoring file bench1.o, building for iOS Simulator-i386 but attempting to link with file built for unknown-arm64
ld: warning: ignoring file bench2.o, building for iOS Simulator-i386 but attempting to link with file built for unknown-arm64
ld: warning: ignoring file datatest.o, building for iOS Simulator-i386 but attempting to link with file built for unknown-arm64
ld: warning: ignoring file fipsalgt.o, building for iOS Simulator-i386 but attempting to link with file built for unknown-arm64
ld: warning: ignoring file dlltest.o, building for iOS Simulator-i386 but attempting to link with file built for unknown-arm64
ld: warning: ignoring file validat1.o, building for iOS Simulator-i386 but attempting to link with file built for unknown-arm64
ld: warning: ignoring file validat2.o, building for iOS Simulator-i386 but attempting to link with file built for unknown-arm64
ld: warning: ignoring file validat3.o, building for iOS Simulator-i386 but attempting to link with file built for unknown-arm64
ld: warning: ignoring file bench3.o, building for iOS Simulator-i386 but attempting to link with file built for unknown-arm64
ld: warning: ignoring file validat0.o, building for iOS Simulator-i386 but attempting to link with file built for unknown-arm64
ld: warning: ignoring file validat4.o, building for iOS Simulator-i386 but attempting to link with file built for unknown-arm64
ld: warning: ignoring file validat5.o, building for iOS Simulator-i386 but attempting to link with file built for unknown-arm64
ld: warning: ignoring file validat6.o, building for iOS Simulator-i386 but attempting to link with file built for unknown-arm64
ld: warning: ignoring file validat7.o, building for iOS Simulator-i386 but attempting to link with file built for unknown-arm64
ld: warning: ignoring file validat10.o, building for iOS Simulator-i386 but attempting to link with file built for unknown-arm64
ld: warning: ignoring file regtest2.o, building for iOS Simulator-i386 but attempting to link with file built for unknown-arm64
ld: warning: ignoring file regtest3.o, building for iOS Simulator-i386 but attempting to link with file built for unknown-arm64
ld: warning: ignoring file regtest4.o, building for iOS Simulator-i386 but attempting to link with file built for unknown-arm64
ld: warning: ignoring file validat8.o, building for iOS Simulator-i386 but attempting to link with file built for unknown-arm64
ld: warning: ignoring file validat9.o, building for iOS Simulator-i386 but attempting to link with file built for unknown-arm64
ld: warning: ignoring file regtest1.o, building for iOS Simulator-i386 but attempting to link with file built for unknown-arm64
Undefined symbols for architecture i386:
  "_main", referenced from:
     implicit entry/start for main executable
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [cryptest.exe] Error 1
noloader commented 3 years ago

Perform a make clean between builds.

You may also need to change -miphonesimulator-version-min=6. For testing I have access to Xcode 8. Xcode 14 may need something higher.

Finally, Crypto++ 8.4 and 8.5 improved those script. You may want to use one of those versions of the library.

akashnagapure commented 3 years ago

Perform a make clean between builds.

Finally, Crypto++ 8.4 and 8.5 improved those script. You may want to use one of those versions of the library.

Thanks. Performing make clean between builds and using latest version of library solved my issue