两个共享库项目编译正常,其一无.so后缀,Eclipse设置一致,求原因
这种情况确实挺闹心的——明明看着配置全一样,结果输出的文件就差个后缀。我帮你梳理几个容易被忽略的排查点:
检查手动指定的输出文件名
去Eclipse的项目属性里,依次找C/C++ Build -> Settings -> Tool Settings -> Linker -> General,看看「Output file」字段是不是直接写了shared_lib_1而不是shared_lib_1.so。有时候可能之前改了这个设置,后来忘了同步到另一个项目,GUI里的小细节很容易漏看。排查自定义Makefile的覆盖
如果你的项目不是完全由Eclipse自动生成构建脚本,而是用了自定义的Makefile,那它的优先级会比GUI配置高。看看第二个项目的Makefile里,TARGET变量是不是设成了不带.so的名字,或者链接命令里直接加了-o shared_lib_1这种参数,直接指定了输出文件名。确认构建配置是否一致
你会不会是用了不同的构建配置编译两个项目?比如一个用Debug,另一个用Release,而这两个配置的输出命名规则不一样。点击Eclipse顶部的构建配置下拉框,确保两个项目用的是同一个配置,再去对应配置里检查设置。检查链接器的额外参数
再看看Linker -> Miscellaneous里的「Other flags」,有没有加类似-o shared_lib_1的参数——这个会直接覆盖默认的输出文件名,哪怕你设了-shared也没用。核实项目类型的隐性设置
虽然你说都是共享库项目,但会不会第二个项目创建时误选了「可执行文件」,后来才改成共享库?这种情况下,Eclipse可能还保留着可执行文件的命名逻辑。去Linker -> Shared Library Settings里确认「Create shared library」是勾选状态,确保链接器确实在生成共享库。
先从输出文件名和Makefile这两点查起,这是最常见的问题根源。
内容的提问来源于stack exchange,提问作者vico

