0

iOS プロジェクトで libnet 1.1.7 を使用しようとしていますが、いくつかのエラーが発生します。

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)

これは、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

エラーの詳細と修正方法を教えてください。どんな助けでも大歓迎です。

PS私はMavericks(v10.9.4)でXcode 5.0.1を使用しています

アップデート。ソースから i386 arch の libnet を再構築しましたが、エラーが 1 つしかありません。

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)

iOS のソースから libnet をコンパイルする際に問題があると思います。どのように正しく行うのですか?

4

1 に答える 1

1

libnet 1.1.7 を入手

ターミナル ウィンドウを開き、libnet フォルダーに移動します。次に、iOS7 エミュレーター用に libnet をコンパイルする必要があります。

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

Xcode でプロジェクトを選択することから始めます。[ターゲット] を選択し、[ビルド設定] を選択します。[リンク] セクションが表示されるまで、[ビルド設定] を下にスクロールします。[その他のリンカー フラグ] オプションの下に、-lnet を追加します。Search Paths セクションに到達するまで下にスクロールし、/usr/local/lib を Library Search Paths に追加します。最後に、ヘッダーの検索パスに /usr/local/include を追加します。

于 2014-08-27T07:00:32.550 に答える