编译为"共享库"的源代码
source compiled to 'shared library'
我有一个简单的源文件'source.cpp:
#include <iostream>
using namespace std;
int main() {
int ival(0);
cout << "Bitte eine Ganzzahl: ";
cin >> ival;
cout << "Sie gaben die Zahl " << ival << " einn";
cout << "Ein Monster mit "
<< "zwei Zeilenn";
return 0;
}
现在,我正在使用:
进行编译g++ source.cpp -o out
该结果在Thunar中显示为"共享库"。我可以用。
ldd说:
linux-vdso.so.1 (0x00007fffb55be000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007fd5d4387000)
libm.so.6 => /usr/lib/libm.so.6 (0x00007fd5d403b000)
libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007fd5d3e24000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007fd5d3a6d000)
/lib64/ld-linux-x86-64.so.2 => /usr/lib64/ld-linux-x86-64.so.2 (0x00007fd5d4910000)
当我设置 - 静态标志时,我会得到一个典型的"程序",并且它在Thunar上工作,但肯定会更大。LDD说"该程序没有动态链接"
几年前,我编制了此消息来源,但我不记得编译器选项,并且在典型的"程序"中有一个未静态链接的典型"程序"。LDD说的与第一个示例中的同样。
所以,我该怎么做才能通过双击文件管理器中的双击可以执行的"程序"可执行文件。
(我当然在所有示例中设置了可执行文件(
我在Thunar上也有类似的问题,因为我正在构建的可执行文件将被编译到"共享库"中。而不是可执行的。当我使用-fno -pie编译时,我会得到错误:重新定位R_X86_64_32针对`.rodata.str1.8''在制作PIE对象时无法使用;与-fpie重新编译。当然,-fpie会导致可执行文件被编译为"共享库"。换句话说,我无法通过更改编译器开关来解决问题。所以我写了一个bash脚本作为工作。
runsharedlibraryasexe.sh
#!/bin/bash
"$1" &
然后,当我双击Thunar以运行" EXE/共享库"时我告诉Thunar用这个脚本打开它。
注意:Bash脚本必须标记为可执行文件。
我希望这会有所帮助。我真的希望我能找到一种将我的应用程序编译到可执行文件中的方法。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 在Linux中哪里可以找到互斥、未来等的源代码
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 在cuda线程之间共享大量常量数据
- 如何从具有移动语义的类对象中生成共享指针
- 在c代码之间共享数据的最佳方式
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 如果编译的源代码是特定于它编译的硬件的,我们如何分发它
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 将静态库链接到不带-fPIC的共享库中
- 难以理解某些人解决IOI问题的源代码
- 编译为"共享库"的源代码
- 给定程序计数器,在共享库中查找源代码行
- 如何共享我的 C/C++ 项目并隐藏一些源代码
- 共享源代码隐藏类
- 从堆栈跟踪中查找共享库中的源代码行
- 您如何共享Java功能而不提供其他源代码
- 如何将第三方C++源代码编译为共享库
- 如何在Visual Studio中的项目之间共享C++源代码文件
- 如何从源代码构建nodejs作为共享库