jonreid / OCMockito

Mockito for Objective-C: creation, verification and stubbing of mock objects
MIT License
991 stars 118 forks source link

Undefined symbols for architecture x86_64: #126

Closed liuzhiyi1992 closed 8 years ago

liuzhiyi1992 commented 8 years ago

if setup with adding the framework download from https://github.com/jonreid/OCMockito/releases/

Occur: ld: warning: directory not found for option '-F"/Applications/Xcode.app/Contents/Developer/Library/Frameworks"'

Undefined symbols for architecture x86_64: "_HCDescribeMismatch", referenced from: -[MKTInvocationMatcher enumerateMismatchesOf:usingBlock:] in OCMockitoIOS(MKTInvocationMatcher.o) "_HCWrapInMatcher", referenced from: -[MKTInvocationMatcher matcherForArgument:] in OCMockitoIOS(MKTInvocationMatcher.o) "_HC_nilValue", referenced from: -[MKTInvocationMatcher matcherForArgument:] in OCMockitoIOS(MKTInvocationMatcher.o) "_OBJCCLASS$_HCStringDescription", referenced from: objc-class-ref in OCMockitoIOS(MKTPrinter.o) "_OBJCCLASS$_HCTestFailure", referenced from: objc-class-ref in OCMockitoIOS(MKTTestLocation.o) "_OBJCCLASS$_HCTestFailureReporterChain", referenced from: objc-class-ref in OCMockitoIOS(MKTTestLocation.o) "_OBJCCLASS$_OCMMacroState", referenced from: objc-class-ref in BusinessListPickerTest.o "_OBJCCLASS$_OCMockObject", referenced from: objc-class-ref in BusinessListPickerTest.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)


And if setup with pod used:

target :MyTests, :exclusive => true do
  pod 'OCMockito', '~> 3.0.1'
end

Occur:

Undefined symbols for architecture x86_64: "_MKTMock", referenced from: _mock in SportTests.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)

liuzhiyi1992 commented 8 years ago

add $(inherited) to Other Linker Flag to fixed this problem

restjohn commented 8 years ago

This is happening for me with the $(inherited) Other Linker Flag present. I'm using the OCMockito CocoaPod 3.0.2, Xcode 7.3.1, and CocoaPods 1.0.1. The build works when I compile to an actual device rather than a simulator.

Ld /Users/stjohnr/Library/Developer/Xcode/DerivedData/DICE-bsxbmnmnwjtxorfcorgdgsywpavi/Build/Products/Debug-iphonesimulator/DICE.app/PlugIns/DICETests.xctest/DICETests normal x86_64
    cd /Users/stjohnr/sandbox/dice-ios
    export IPHONEOS_DEPLOYMENT_TARGET=6.0
    export PATH="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch x86_64 -bundle -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.3.sdk -L/Users/stjohnr/Library/Developer/Xcode/DerivedData/DICE-bsxbmnmnwjtxorfcorgdgsywpavi/Build/Products/Debug-iphonesimulator -L/Users/stjohnr/Library/Developer/Xcode/DerivedData/DICE-bsxbmnmnwjtxorfcorgdgsywpavi/Build/Products/Debug-iphonesimulator/Expecta -L/Users/stjohnr/Library/Developer/Xcode/DerivedData/DICE-bsxbmnmnwjtxorfcorgdgsywpavi/Build/Products/Debug-iphonesimulator/OCHamcrest -L/Users/stjohnr/Library/Developer/Xcode/DerivedData/DICE-bsxbmnmnwjtxorfcorgdgsywpavi/Build/Products/Debug-iphonesimulator/OCMockito -L/Users/stjohnr/Library/Developer/Xcode/DerivedData/DICE-bsxbmnmnwjtxorfcorgdgsywpavi/Build/Products/Debug-iphonesimulator/Specta -F/Users/stjohnr/Library/Developer/Xcode/DerivedData/DICE-bsxbmnmnwjtxorfcorgdgsywpavi/Build/Products/Debug-iphonesimulator -F/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.3.sdk/Developer/Library/Frameworks -F/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Frameworks -F/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Frameworks -filelist /Users/stjohnr/Library/Developer/Xcode/DerivedData/DICE-bsxbmnmnwjtxorfcorgdgsywpavi/Build/Intermediates/DICE.build/Debug-iphonesimulator/DICETests.build/Objects-normal/x86_64/DICETests.LinkFileList -Xlinker -rpath -Xlinker @executable_path/Frameworks -Xlinker -rpath -Xlinker @loader_path/Frameworks -mios-simulator-version-min=6.0 -bundle_loader /Users/stjohnr/Library/Developer/Xcode/DerivedData/DICE-bsxbmnmnwjtxorfcorgdgsywpavi/Build/Products/Debug-iphonesimulator/DICE.app/DICE -Xlinker -no_deduplicate -Xlinker -objc_abi_version -Xlinker 2 -ObjC -lExpecta -lOCHamcrest -lOCMockito -lSpecta -framework Foundation -framework XCTest -ObjC -lExpecta -lOCHamcrest -lOCMockito -lSpecta -framework Foundation -framework XCTest -v -framework XCTest -fobjc-arc -fobjc-link-runtime -lPods-DICETests -Xlinker -dependency_info -Xlinker /Users/stjohnr/Library/Developer/Xcode/DerivedData/DICE-bsxbmnmnwjtxorfcorgdgsywpavi/Build/Intermediates/DICE.build/Debug-iphonesimulator/DICETests.build/Objects-normal/x86_64/DICETests_dependency_info.dat -o /Users/stjohnr/Library/Developer/Xcode/DerivedData/DICE-bsxbmnmnwjtxorfcorgdgsywpavi/Build/Products/Debug-iphonesimulator/DICE.app/PlugIns/DICETests.xctest/DICETests

Apple LLVM version 7.3.0 (clang-703.0.31)
Target: x86_64-apple-darwin15.5.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
 "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld" -demangle -dynamic -arch x86_64 -bundle -bundle_loader /Users/stjohnr/Library/Developer/Xcode/DerivedData/DICE-bsxbmnmnwjtxorfcorgdgsywpavi/Build/Products/Debug-iphonesimulator/DICE.app/DICE -ios_simulator_version_min 6.0.0 -syslibroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.3.sdk -ObjC -o /Users/stjohnr/Library/Developer/Xcode/DerivedData/DICE-bsxbmnmnwjtxorfcorgdgsywpavi/Build/Products/Debug-iphonesimulator/DICE.app/PlugIns/DICETests.xctest/DICETests -L/Users/stjohnr/Library/Developer/Xcode/DerivedData/DICE-bsxbmnmnwjtxorfcorgdgsywpavi/Build/Products/Debug-iphonesimulator -L/Users/stjohnr/Library/Developer/Xcode/DerivedData/DICE-bsxbmnmnwjtxorfcorgdgsywpavi/Build/Products/Debug-iphonesimulator/Expecta -L/Users/stjohnr/Library/Developer/Xcode/DerivedData/DICE-bsxbmnmnwjtxorfcorgdgsywpavi/Build/Products/Debug-iphonesimulator/OCHamcrest -L/Users/stjohnr/Library/Developer/Xcode/DerivedData/DICE-bsxbmnmnwjtxorfcorgdgsywpavi/Build/Products/Debug-iphonesimulator/OCMockito -L/Users/stjohnr/Library/Developer/Xcode/DerivedData/DICE-bsxbmnmnwjtxorfcorgdgsywpavi/Build/Products/Debug-iphonesimulator/Specta -filelist /Users/stjohnr/Library/Developer/Xcode/DerivedData/DICE-bsxbmnmnwjtxorfcorgdgsywpavi/Build/Intermediates/DICE.build/Debug-iphonesimulator/DICETests.build/Objects-normal/x86_64/DICETests.LinkFileList -rpath @executable_path/Frameworks -rpath @loader_path/Frameworks -no_deduplicate -objc_abi_version 2 -lExpecta -lOCHamcrest -lOCMockito -lSpecta -framework Foundation -framework XCTest -lExpecta -lOCHamcrest -lOCMockito -lSpecta -framework Foundation -framework XCTest -framework XCTest -lPods-DICETests -dependency_info /Users/stjohnr/Library/Developer/Xcode/DerivedData/DICE-bsxbmnmnwjtxorfcorgdgsywpavi/Build/Intermediates/DICE.build/Debug-iphonesimulator/DICETests.build/Objects-normal/x86_64/DICETests_dependency_info.dat -force_load /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphonesimulator.a -framework Foundation -lobjc -lSystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/7.3.0/lib/darwin/libclang_rt.ios.a -F/Users/stjohnr/Library/Developer/Xcode/DerivedData/DICE-bsxbmnmnwjtxorfcorgdgsywpavi/Build/Products/Debug-iphonesimulator -F/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.3.sdk/Developer/Library/Frameworks -F/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Frameworks -F/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Frameworks
ld: warning: directory not found for option '-F/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.3.sdk/Developer/Library/Frameworks'
ld: warning: object file (/Users/stjohnr/Library/Developer/Xcode/DerivedData/DICE-bsxbmnmnwjtxorfcorgdgsywpavi/Build/Products/Debug-iphonesimulator/libExpecta.a(EXPBlockDefinedMatcher.o)) was built for newer iOS version (7.0) than being linked (6.0)
... lots more of these
Undefined symbols for architecture x86_64:
  "_MKTMock", referenced from:
      _mock in ImportProcessSpec.o
      _mock in FileOperationsSpec.o
      _mock in HtmlReportTypeSpec.o
      _mock in ParseJsonOperationSpec.o
      _mock in ReportStoreSpec.o
      _mock in UnzipOperationSpec.o
      _mock in ZippedHtmlImportProcessSpec.o
      ...
     (maybe you meant: _OBJC_METACLASS_$_MKTMockitoCore, _OBJC_METACLASS_$_MKTMockingProgress , _OBJC_IVAR_$_MKTMockingProgress._verificationMode , _OBJC_IVAR_$_MKTMockingProgress._ongoingStubbing , _OBJC_IVAR_$_MKTMockingProgress._testLocation , _OBJC_CLASS_$_MKTMockingProgress , _OBJC_IVAR_$_MKTMockingProgress._invocationMatcher , _OBJC_CLASS_$_MKTMockitoCore , _OBJC_IVAR_$_MKTMockitoCore._mockingProgress )
  "_MKTMockProtocol", referenced from:
      _mockProtocol in UnzipOperationSpec.o
      _mockProtocol in ZippedHtmlImportProcessSpec.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Just for sanity I used lipo to check the library that is being linked:

> lipo -info /Users/stjohnr/Library/Developer/Xcode/DerivedData/DICE-bsxbmnmnwjtxorfcorgdgsywpavi/Build/Products/Debug-iphonesimulator/OCMockito/libOCMockito.a 
input file /Users/stjohnr/Library/Developer/Xcode/DerivedData/DICE-bsxbmnmnwjtxorfcorgdgsywpavi/Build/Products/Debug-iphonesimulator/OCMockito/libOCMockito.a is not a fat file
Non-fat file: /Users/stjohnr/Library/Developer/Xcode/DerivedData/DICE-bsxbmnmnwjtxorfcorgdgsywpavi/Build/Products/Debug-iphonesimulator/OCMockito/libOCMockito.a is architecture: x86_64

as wells as nm to check the symbols:

> nm /Users/stjohnr/Library/Developer/Xcode/DerivedData/DICE-bsxbmnmnwjtxorfcorgdgsywpavi/Build/Products/Debug-iphonesimulator/OCMockito/libOCMockito.a | grep _MKTMock
                 U _OBJC_CLASS_$_MKTMockingProgress
0000000000000db0 S _OBJC_CLASS_$_MKTMockingProgress
0000000000000978 S _OBJC_IVAR_$_MKTMockingProgress._invocationMatcher
0000000000000968 S _OBJC_IVAR_$_MKTMockingProgress._ongoingStubbing
0000000000000970 S _OBJC_IVAR_$_MKTMockingProgress._testLocation
0000000000000980 S _OBJC_IVAR_$_MKTMockingProgress._verificationMode
0000000000000d88 S _OBJC_METACLASS_$_MKTMockingProgress
0000000000000a68 s l_OBJC_$_CLASS_METHODS_MKTMockingProgress
0000000000000ad0 s l_OBJC_$_INSTANCE_METHODS_MKTMockingProgress
0000000000000c70 s l_OBJC_$_INSTANCE_VARIABLES_MKTMockingProgress
0000000000000cf8 s l_OBJC_$_PROP_LIST_MKTMockingProgress
0000000000000d40 s l_OBJC_CLASS_RO_$_MKTMockingProgress
0000000000000a88 s l_OBJC_METACLASS_RO_$_MKTMockingProgress
                 U _OBJC_CLASS_$_MKTMockingProgress
00000000000004a0 S _OBJC_CLASS_$_MKTMockitoCore
0000000000000500 S _OBJC_IVAR_$_MKTMockitoCore._mockingProgress
00000000000004c8 S _OBJC_METACLASS_$_MKTMockitoCore
0000000000000568 s l_OBJC_$_CLASS_METHODS_MKTMockitoCore
00000000000005d0 s l_OBJC_$_INSTANCE_METHODS_MKTMockitoCore
0000000000000668 s l_OBJC_$_INSTANCE_VARIABLES_MKTMockitoCore
0000000000000690 s l_OBJC_$_PROP_LIST_MKTMockitoCore
00000000000006a8 s l_OBJC_CLASS_RO_$_MKTMockitoCore
0000000000000588 s l_OBJC_METACLASS_RO_$_MKTMockitoCore
0000000000000000 T _MKTMock
0000000000000050 T _MKTMockClass
00000000000001a0 T _MKTMockObjectAndProtocol
00000000000000a0 T _MKTMockProtocol
0000000000000120 T _MKTMockProtocolWithoutOptionals
                 U _OBJC_CLASS_$_MKTMockitoCore

I'm not sure where to go from here. Any help is much appreciated.

restjohn commented 8 years ago

I just did a build with CocoaPods 0.39.0 and it worked. I'll have to look more into that.

restjohn commented 8 years ago

It also seems to work with CocoaPods version 1.1.0.beta.1.