首页 > 解决方案 > 在 SwiftUI 项目中链接和编译 C++ lib (Pcapplusplus) 的问题

问题描述

我正在尝试通过使用目标 C 桥接类在我的 SwiftUI 应用程序中使用 C++ lib Pcapplusplus。我已经编译了一个独立的 C++ 可执行文件,它对 pcpp 库进行了非常基本的使用,但是我不知道如何在 xcode 中链接和编译它。这是我用来在终端中运行独立可执行文件的两个 makefile。抱歉,如果这非常简单,我只是不确定这些 makefile 将如何转换为 xcode 配置选项。感谢回复!

all:
    g++ $(PCAPPP_BUILD_FLAGS) $(PCAPPP_INCLUDES) -c -o main.o main.cpp
    g++ $(PCAPPP_LIBS_DIR) -o Tutorial-HelloWorld main.o $(PCAPPP_LIBS)

# Clean Target
clean:
    rm main.o
    rm Tutorial-HelloWorld
    # All Target
all:
    g++ $(PCAPPP_BUILD_FLAGS) $(PCAPPP_INCLUDES) -c -o main.o main.cpp
    g++ $(PCAPPP_LIBS_DIR) -o Tutorial-HelloWorld main.o $(PCAPPP_LIBS)

# Clean Target
clean:
    rm main.o
    rm Tutorial-HelloWorld

### COMMON ###

# includes
PCAPPP_INCLUDES := -I/opt/homebrew/Cellar/pcapplusplus/21.05/include/pcapplusplus


# libs
PCAPPP_LIBS := /opt/homebrew/opt/pcapplusplus/lib/libPcap++.a /opt/homebrew/opt/pcapplusplus/lib/libPacket++.a /opt/homebrew/opt/pcapplusplus/lib/libCommon++.a

# post build
PCAPPP_POST_BUILD :=

# build flags
PCAPPP_BUILD_FLAGS := -fPIC

ifdef PCAPPP_ENABLE_CPP_FEATURE_DETECTION
    PCAPPP_BUILD_FLAGS += -DPCAPPP_CPP_FEATURE_DETECTION -std=c++11
endif

ifndef CXXFLAGS
CXXFLAGS := -O2 -g -Wall
endif

PCAPPP_BUILD_FLAGS += $(CXXFLAGS)
### MAC OS X ###

# includes
PCAPPP_INCLUDES += -I$(MACOS_SDK_HOME)/usr/include/netinet

# libs
PCAPPP_LIBS += -lpcap -lpthread -framework SystemConfiguration -framework CoreFoundation

标签: c++swiftxcodepcapplusplus

解决方案


以下是在 SwiftUI 项目中构建 PcapPlusPlus 的步骤:

  1. 为 arm64 运行 PcapPlusPlus 配置脚本:
    ./configure-mac_os_x.sh --arm64
    
  2. 构建 PcapPlusPlus:
    make libs
    
  3. 转到构建设置,并在“标题搜索路径”下添加 PcapPlusPlus 包含目录
  4. 在“其他链接器标志”下添加:
    -L/usr/local/lib -lpcap, -lpthread $(inherited)
    
  5. 在项目设置的构建阶段选项卡下,在“将二进制文件与库链接”中添加SystemConfig框架、、corefoundation然后和libCommon++.alibPacket++.alibPcap++.a

@publicstaticmain 如果有任何遗漏或不准确,请告诉我。


推荐阅读