关于编译器-l选项(arm-linux-androideabi-gcc)

时间:2018-01-31 09:00:13

标签: compiler-errors android-ndk

当我使用make命令(standalone_toolchain)

    if (e.CommandName == "Details")
    {
        int id = Convert.ToInt32(e.CommandArgument);
        Response.Redirect("~/MEMBER/UploadedDocList.aspx?id=" + id, false);
    }
}

编译器似乎没有关于-lpcap

的信息

它似乎与链接器指令文件有关。

如果我在编译时使用-lpcap选项,我想链接libpcap.a

我是否需要在ld文件中添加内容?

谢谢!

1 个答案:

答案 0 :(得分:1)

通常,我们使用-L来提供链接器应该查找库的目录。因此,对于gcc,将使用

gcc -shared -o libmybest.so mybest.c -L ~/mydev/prebuild/arm -lpcap -llog

...并将为arm编译的静态库 libpcap.a 放到目录~/mydev/prebuild/arm

使用 bdk-build 为Android构建时,您很想在 Android.mk 文件中编写类似的内容:

include $(CLEAR_VARS)              #### don't use this block in real life!!!
LOCAL_MODULE    := mybest
LOCAL_SRC_FILES += mybest.c
LOCAL_LDLIBS    += -llog
LOCAL_LDLIBS    += -L ~/mydev/prebuild/$(TARGET_ARCH_ABI) -lpcap
include $(BUILD_SHARED_LIBRARY)

不要这样做! 这适用于NDK的早期版本,但现在已弃用。

Android NDK最佳做法只是拥有系统库(例如 libm libdl liblog < / strong>列在LOCAL_LDLIBS)。

对于第三方预建库,您应该使用:

include $(CLEAR_VARS)
LOCAL_MODULE    := pcap
LOCAL_SRC_FILES := ~/mydev/prebuild/$(TARGET_ARCH_ABI)/liblpcap.a
LOCAL_EXPORT_C_INCLUDES := ~/mydev/prebuild/include
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE    := mybest
LOCAL_SRC_FILES += mybest.c
LOCAL_LDLIBS    += -llog
LOCAL_STATIC_LIBRARIES += pcap
include $(BUILD_SHARED_LIBRARY)

这样,您就可以在一个区块中获得有关 libpcap 的所有信息。