【问题标题】:warning: cannot find entry symbol _start - while compiling to .so警告:在编译为 .so 时找不到入口符号 _start
【发布时间】:2015-11-10 17:55:59
【问题描述】:

您好,我正在运行 Linux Ubuntu 并使用 icpc(英特尔编译器)进行编译, 我想获得一个共享库,所以我使用了命令:

icpc -o myShared.so -std=c++11 -shared -DSTDC_HEADERS -D __cplusplus=201103L -fpermissive -DPT_XX_DEV -fexceptions -frtti -DANDROID -w -fstack-protector -fPIE -fPIC -pie -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security  -I/home/admins/aaa/include  -I/home/admins/bbb/include a.cpp b.cpp c.cpp  -lpthread -L./../../static_libs -lmyStatic

我收到警告:

ld: warning: cannot find entry symbol _start; defaulting to 0000000000007040

我在以前的主题中阅读过这个警告,我发现这个警告与程序的入口点有关,但据我了解 - 共享库中不应该有入口点。

有人知道如何解决吗?

【问题讨论】:

    标签: c++ c linux shared-libraries icc


    【解决方案1】:

    在编译期间添加以下行。这可能会解决您的问题。

    -lc --entry main
    

    -lc 告诉编译器使用标准 C 库,--entry main 告诉编译器使用 'main' 的地址作为应用程序的入口点。

    注意:虽然我对intel编译器不熟悉,但我还是试了一下。

    【讨论】:

    • 没有 main - 因为我想要的是共享库。
    • 我使用以下选项来编译共享库。步骤 1. g++ -c -fpic source_files.cpp -Wall -Wextra -ldl -std=c++0x [其他标志] step2。 g++ -shared -o libc.so.6 "所有 .o 文件" -Wall -Wextra -ldl -std=c++0x [其他错误]
    【解决方案2】:

    删除 -fPIE-pie 标志解决了我的问题。 -pie 在您尝试创建共享库时不应使用, 而且-fPIE 在大多数情况下都不应该使用。

    【讨论】:

      【解决方案3】:

      使用英特尔编译器编译成目标文件,然后使用gcc 链接目标文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-15
        • 2018-12-23
        • 2016-04-17
        • 2019-01-25
        • 2015-02-13
        • 1970-01-01
        • 2012-10-25
        • 1970-01-01
        相关资源
        最近更新 更多