I'm trying to use libnet 1.1.7 in iOS project and i'm getting some errors:
Ld /Users/admin/Library/Developer/Xcode/DerivedData/net_tools-gnkjrfjgtxkpesepyzzpunpfdwkx/Build/Products/Debug-iphonesimulator/net_tools.app/net_tools normal i386
cd /Users/admin/Desktop/net_tools
setenv IPHONEOS_DEPLOYMENT_TARGET 7.0
setenv PATH "/Applications/Разработка/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Applications/Разработка/Xcode.app/Contents/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
/Applications/Разработка/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch i386 -isysroot /Applications/Разработка/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.0.sdk -L/Users/admin/Library/Developer/Xcode/DerivedData/net_tools-gnkjrfjgtxkpesepyzzpunpfdwkx/Build/Products/Debug-iphonesimulator -L/usr/local/lib -F/Users/admin/Library/Developer/Xcode/DerivedData/net_tools-gnkjrfjgtxkpesepyzzpunpfdwkx/Build/Products/Debug-iphonesimulator -filelist /Users/admin/Library/Developer/Xcode/DerivedData/net_tools-gnkjrfjgtxkpesepyzzpunpfdwkx/Build/Intermediates/net_tools.build/Debug-iphonesimulator/net_tools.build/Objects-normal/i386/net_tools.LinkFileList -Xlinker -objc_abi_version -Xlinker 2 -lnet -fobjc-arc -fobjc-link-runtime -Xlinker -no_implicit_dylibs -mios-simulator-version-min=7.0 -framework CoreGraphics -framework UIKit -framework Foundation -Xlinker -dependency_info -Xlinker /Users/admin/Library/Developer/Xcode/DerivedData/net_tools-gnkjrfjgtxkpesepyzzpunpfdwkx/Build/Intermediates/net_tools.build/Debug-iphonesimulator/net_tools.build/Objects-normal/i386/net_tools_dependency_info.dat -o /Users/admin/Library/Developer/Xcode/DerivedData/net_tools-gnkjrfjgtxkpesepyzzpunpfdwkx/Build/Products/Debug-
ld: warning: ignoring file /usr/local/lib/libnet.dylib, file was built for x86_64 which is not the architecture being linked (i386): /usr/local/lib/libnet.dylib
Undefined symbols for architecture i386:
"_libnet_addr2name4", referenced from:
-[AppDelegate application:didFinishLaunchingWithOptions:] in AppDelegate.o
"_libnet_addr2name6_r", referenced from:
-[AppDelegate application:didFinishLaunchingWithOptions:] in AppDelegate.o
"_libnet_destroy", referenced from:
-[AppDelegate application:didFinishLaunchingWithOptions:] in AppDelegate.o
"_libnet_init", referenced from:
-[AppDelegate application:didFinishLaunchingWithOptions:] in AppDelegate.o
"_libnet_name2addr4", referenced from:
-[AppDelegate application:didFinishLaunchingWithOptions:] in AppDelegate.o
"_libnet_name2addr6", referenced from:
-[AppDelegate application:didFinishLaunchingWithOptions:] in AppDelegate.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
This is my simple code in AppDelegate.m:
#import "AppDelegate.h"
#import <libnet.h>
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
libnet_t *lnet;
char errbuf[LIBNET_ERRBUF_SIZE];
u_int32_t addr;
struct libnet_in6_addr addr6;
char ipv6addr[64];
char addr_str[] = "www.google.com";
lnet = libnet_init(LIBNET_RAW4, NULL, errbuf);
if ( lnet == NULL ) {
NSLog(@"libnet_init() failed: %s", errbuf);
exit(EXIT_FAILURE);
}
//IPv4
addr = libnet_name2addr4(lnet, addr_str, LIBNET_RESOLVE);
NSLog(@"%s",libnet_addr2name4(addr, LIBNET_DONT_RESOLVE));
//IPv6
addr6 = libnet_name2addr6(lnet, addr_str, LIBNET_RESOLVE);
libnet_addr2name6_r(addr6, LIBNET_DONT_RESOLVE, ipv6addr,
sizeof(ipv6addr));
NSLog(@"%s",ipv6addr);
libnet_destroy(lnet);
return YES;
}
@end
Can anyone please explain the error to me in detail, and how to rectify it? Any help would be much appreciated.
P.S. I use Xcode 5.0.1 on Mavericks (v10.9.4)
UPD. I'v rebuild libnet for i386 arch from source and i'v got only one error:
ld: building for iOS Simulator, but linking against dylib built for MacOSX file '/usr/local/lib/libnet.dylib' for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
I think there's a problem with compile libnet from source for iOS. How do it correctly?
Open a terminal window and go to libnet folder, next we need to compile libnet for iOS7 emulator:
export CC=clang
export IPHONEOS_DEPLOYMENT_TARGET=7.0
export PATH="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:$PATH"
export CFLAGS="-arch i386 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.0.sdk -mios-simulator-version-min=7.0"
./configure
make
sudo make install
Begin by selecting the project in Xcode. Select Target and then select Build Settings. Scroll down in the Build Settings until you get to the Linking section. Under the Other Linker Flags option, add -lnet. Now scroll down until you reach the Search Paths section and add /usr/local/lib to Library Search Paths. Finally, add /usr/local/include to the header's search path.