Linux上で動作するC++を作成しました。その機能のうち、提供されたホストに対してpingを実行します。 pingは関連するPocoライブラリに基づいています。しかし生産C++の実行可能ファイルがlinuxのC++実行可能ファイルにMakefile経由でcap_net_raw機能を追加する方法
setcap cap_net_raw=ep /bin/C++_APP
を与えることによって設定cap_net_raw
能力を持つべきでLinux上で正常に実行するために、私はグーグルで見つかった例に基づいて以下のMakefileをもを使用しています。
CC := g++
# Folders
SRCDIR := src
BUILDDIR := build
TARGETDIR := bin
# Targets
EXECUTABLE := C++_APP
TARGET := $(TARGETDIR)/$(EXECUTABLE)
SRCEXT := cpp
SOURCES := $(shell find $(SRCDIR) -type f -name *.$(SRCEXT))
OBJECTS := $(patsubst $(SRCDIR)/%,$(BUILDDIR)/%,$(SOURCES:.$(SRCEXT)=.o))
CFLAGS := -c -Wall
INC := -I include -I /usr/local/include
LIB := -L /usr/local/lib -lPocoFoundation -lPocoNet -lPocoUtil
$(TARGET): $(OBJECTS)
@echo " Linking..."
@echo " $(CC) $^ -o $(TARGET) $(LIB)"; $(CC) $^ -o $(TARGET) $(LIB)
$(BUILDDIR)/%.o: $(SRCDIR)/%.$(SRCEXT)
@mkdir -p $(BUILDDIR)
@echo " $(CC) $(CFLAGS) $(INC) -c -o [email protected] $<"; $(CC) $(CFLAGS) $(INC) -c -o [email protected] $<
clean:
@echo " Cleaning...";
@echo " $(RM) -r $(BUILDDIR) $(TARGET)"; $(RM) -r $(BUILDDIR) $(TARGET)
.PHONY: clean
私は次のエラーましたしかし、私は最後のビルドコマンドとして
@echo "Setting Capabilities"; sudo setcap cap_net_raw=ep $(TARGETDIR)/$(EXECUTABLE)
を次のコマンドを追加しました:私は、ビルド後にコマンドを与えるとき一方
Failed to set capabilities on file `bin/NPT' (Invalid argument) The value of the capability argument is not permitted for a file. Or the file is not a regular (non-symlink) file
をC++実行可能ファイルのすべてが正常に動作します。私は間違って何をしていますか?
「bin/NPT」と呼ばれる通常のファイルはありますか?また、正確にどこに追加しましたか?そして、 '$(TARGETDIR)/ $(EXECUTABLE)'を '$(TARGET)'を使って既存の行で使用したのはなぜですか? –
@David Schwartz、はいNPTはC++ _ appの実際の名前です。 $(TARGET)も使用したときに同じエラーが発生しました – dk13
外部ライブラリのインストールディレクトリをハードコーディングする代わりに 'pkg-config'を使用することができます(この場合は、 、 '/ usr/local')をMakefileに追加します。このようにして、あなたのプログラムをコンパイルするかもしれない他の人たちがあなたを呪いません。代わりに 'pkg-config'を呪います。 –