Swift未使用pkg-config加载rabbitmq-c系统库的问题排查
Swift Package未读取librabbitmq.pc配置导致编译失败
背景配置
- 通过Homebrew安装了
rabbitmq-c和openssl@3 - Package.swift中定义了systemLibrary目标,指定
pkgConfig: "librabbitmq",并配置brew提供者:
let package = Package( name: "swift-rabbitmq", platforms: [ .macOS(.v12) ], products: [ .library( name: "CRabbitMQ", targets: [ "CRabbitMQ" ]) ], dependencies: [ ], targets: [ .systemLibrary( name: "CRabbitMQ", pkgConfig: "librabbitmq", providers: [ .brewItem(["rabbitmq-c"]) ]), .testTarget( name: "TestsCRabbitMQ", dependencies: [ .target(name: "CRabbitMQ") ]) ] )
- 手动执行
pkg-config --cflags librabbitmq能返回正确的头文件路径:
$ pkg-config --cflags librabbitmq -I/opt/homebrew/Cellar/rabbitmq-c/0.11.0/include -I/opt/homebrew/Cellar/openssl@3/3.0.5/include
本地文件内容
modulemap文件
module CRabbitMQ [system] { header "rabbitmq.h" link "rabbitmq" export * }
rabbitmq.h头文件
#ifndef rabbitmq_h #define rabbitmq_h #import <amqp.h> #import <amqp_framing.h> #import <amqp_ssl_socket.h> #import <amqp_tcp_socket.h> #endif /* rabbitmq_h */
问题现象
编译项目时,Swift编译器提示rabbitmq.h中引用的amqp.h等头文件找不到,但手动通过以下命令指定编译参数可正常运行:
swift test -Xcc -I/opt/homebrew/Cellar/rabbitmq-c/0.11.0/include -Xlinker -L/opt/homebrew/Cellar/rabbitmq-c/0.11.0/lib -Xlinker -lrabbitmq
疑问
为何Swift Package没有自动使用librabbitmq.pc中的配置?
内容的提问来源于stack exchange,提问作者ugocottin
相关产品推荐
相关产品推荐

