error: only position independent executables (PIE) are supported.

这个不需要什么解释吧;

2018.6.1 增加新内容<<<<<<<<<<<<<<<

:其实这是 API19之前的内存地址随机话的要求;

后来的api版本强制要求了PIE了.所以根本上不用加这个了如果你的target api 版本>19的话

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

android.mk 文件

LOCAL_CFLAGS += -fPIE

LOCAL_LDFLAGS += -fPIE -pie

CMAKE

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIE")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIE -pie")

下边是一个executeable的例子:

# For more information about using CMake with Android Studio, read the
# documentation: https://d.android.com/studio/projects/add-native-code.html
# Sets the minimum version of CMake required to build the native library.

cmake_minimum_required(VERSION 3.4.1)

# Creates and names a library, sets it as either STATIC
# or SHARED, and provides the relative paths to its source code.
# You can define multiple libraries, and CMake builds them for you.
# Gradle automatically packages shared libraries with your APK.

set(EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/build/${ANDROID_ABI}")


SET(SRC_LIST
    websever.cpp
    mns_handler.cpp
    mns/mns_client.cpp
    mns/mns_common_tool.cpp
    mns/mns_exception.cpp
    mns/mns_network_tool.cpp
    mns/mns_protocol.cpp
    mns/mns_utils.cpp
    mns/pugiconfig.hpp
    mns/pugixml.cpp
    SHA1.cpp
    HMAC_SHA1.cpp

)

add_executable(httpsvr ${SRC_LIST})


target_include_directories(httpsvr PRIVATE
                                include/curl/
                                include/
                                mns/
                                ${CMAKE_SOURCE_DIR}/)

find_library(log-lib log)
find_library(z-lib z)



add_library(libcurl STATIC IMPORTED)
set_target_properties(libcurl PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}/libcurl.a)


target_link_libraries(httpsvr libcurl ${z-lib})


### 解决方案 当遇到 `configure` 错误提示 "C compiler cannot create executables" 时,通常意味着配置脚本未能成功验证编译器的功能。这可能是由于多种原因引起的,包括但不限于环境变量设置不正确、缺少必要的库或工具链问题。 #### 可能的原因分析 1. **路径未正确设置** 如果系统的 PATH 环境变量中没有包含 GCC 或其他 C 编译器的位置,则 configure 脚本可能找不到所需的命令[^1]。 2. **依赖项缺失** 缺少标准开发包(如 glibc-devel, gcc-c++ 等),这些对于构建过程至关重要。确保安装了所有必需的软件包可以解决问题。 3. **权限不足** 当前用户是否有足够的权限来读取源码目录并写入目标文件夹?如果是在受限环境中运行,请确认有足够的访问权。 4. **Makefile 配置错误** 使用合适的 Makefile 变量而不是硬编码路径非常重要。例如,在某些情况下应避免使用 '@bindir@' 这样的占位符而应该采用相应的 makefile 变量替代之。 5. **特定于操作系统的调整** 对于基于 Systemd 的 Linux 发行版来说,可能存在与服务管理有关的具体需求。比如之前的一个修复版本就涉及到撤销对 CATALINA_OUT_CMD 环境变量的支持更改以适应那些没有显式指定 PID 文件的服务定义方式的变化[^2]。 #### 排查步骤建议 为了诊断具体是什么地方出了错,查看 `config.log` 是非常有帮助的方法之一。该日志记录了整个检测过程中产生的输出以及失败的地方。通过阅读这个文件中的信息,能够更精确地定位到实际发生的问题所在。 ```bash # 查看 config.log 中的内容寻找线索 less path/to/your/project/config.log ``` #### 示例解决方案 假设是因为基本的编译工具集丢失而导致此问题: ```bash sudo apt-get update && sudo apt-get install build-essential # Debian / Ubuntu systems sudo yum groupinstall 'Development Tools' # RHEL/CentOS/Fedora systems ``` 上述命令会安装一系列常用的编程工具和库,有助于解决大多数常见的编译难题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值