草庐IT

linux - 如何在 Linux 上将普通文件变成符号链接(symbolic link)

我正在编写一个(非)归档工具,它的设计方式是首先从归档中创建一个常规文件,然后再检查特殊属性并可能决定该项目是一个符号链接(symboliclink),事实上。注意:在更多人误解我想创建一个文件的符号链接(symboliclink)之前。。不,我将符号链接(symboliclink)数据(即它的路径)写入文件,然后我想告诉文件系统这是一个符号链接(symboliclink)我一直在OSX上开发它,只需相应地设置其类型和创建者代码,就可以将常规文件转换为符号链接(symboliclink)。现在我想让这段代码也能在Linux上运行。所以我想在那里找到类似的方法。我知道创建符号链接(sym

C++ 符号在共享对象中具有不同的大小

我一直致力于开发一个跨平台窗口库,专门用于OpenGL,目前专注于Linux。我正在使用glload来管理OpenGL扩展,并且正在将其与我稍后将使用的其他库一起编译到.so中。这个`.so正如您所期望的那样被动态加载,但在运行时程序会给出以下输出(手动换行以便于阅读):_dist/x64-linux-debug/bin/test:Symbol`glXCreateContextAttribsARB'has\differentsizeinsharedobject,considerre-linking现在,显然我已经尝试过重新链接,甚至多次重建整个项目(进行测试,而不是盲目地希望它会神奇地

Linux 文件权限的正则表达式(数字符号)

我这辈子都想不出合适的正则表达式。我正在寻找的是一个正则表达式,用于匹配Linux文件权限的有效数字表示(例如,740表示全部不读,777表示全部全部)。到目前为止,我已经尝试了以下方法:strtotest=740echo"$strtotest"|grep-q"[(0|1|2|3|4|5|7){3}]"if[$?-eq0];thenecho"foundit"fi上面的问题是正则表达式匹配其中包含1-5或7的任何内容,而不管任何其他字符。例如,如果将strtotest更改为709,则条件将为真。我也试过[0|1|2|3|4|5|7{3}]和[(0|1|2|3|4|5|7{3})]但那些效

linux - 当路径包含符号链接(symbolic link)时,如何在 unix/linux 中移回一个目录?

我创建了一个指向深层嵌套目录的符号链接(symboliclink)。使用符号链接(symboliclink),我可以从我的主目录移动到该目录。我想从目标目录移回一个目录,但shell返回到主目录。[root@pe1800xs~]#pwd/root[root@pe1800xs~]#mkdir-pabc/def/ghi/jkl/mno/pqr[root@pe1800xs~]#ln-sabc/def/ghi/jkl/mno/pqr/xyz[root@pe1800xs~]#cdxyz[root@pe1800xsxyz]#pwd/root/xyz[root@pe1800xsxyz]#pwd-P/

c - 获取符号链接(symbolic link)的真实路径

假设我想获取符号链接(symboliclink)的真实路径。我知道readlink和stat系统调用都可以取消对链接的引用并为我提供它的真实路径。它们是否以相同的方式运行(仅关于取消引用,我知道stat做的更多)?我应该更喜欢其中之一吗? 最佳答案 使用stat()告诉您任何符号链接(symboliclink)链末尾的文件;它不会以任何方式为您提供路径。使用lstat()获取有关所引用的符号链接(symboliclink)的信息(如果有);当给定的名称不是符号链接(symboliclink)时,它的行为类似于stat()。使用rea

linux - 使用 g++ 的符号可见性

我在Linux/Mac下编译了一个隐藏符号的C++库。我对所有类都使用了__attribute__((visibility("hidden")))并使用选项(-c-O2-fPIC-MMD-MP-MF).在Mac下,使用MacDependencies,工作完成得很好,因为我只看到了我的导出(我实际上看到了之前和之后的差异)。但是,我注意到使用nm我仍然可以看到符号的所有名称。这在Mac和Linux下都会发生。这是为什么呢?有什么办法可以避免这种情况吗? 最佳答案 公开或隐藏,符号仍然存在。nm显示所有符号。不同之处在于隐藏符号对动态链

linux - 如何知道给定的共享库是否使用调试符号构建?

我有一些编译库,即x86Linux上的共享库(*.so),我想快速确定它们是否使用调试符号编译(即使用-g/debug选项).如何检查? 最佳答案 请注意,notstripped并不意味着调试符号。库代码://myshared.c#includevoidprint_from_lib(){printf("Printedfromsharedlibrary\n");}使用和不使用调试标志进行编译:gcc-c-Wall-Werror-fpicmyshared.cgcc-shared-olibmyshared.somyshared.ogcc-

linux - 带有两个共享库的 dlopen,导出符号

我有一个linux共享库foo.so,它是使用dlopen("foo.so",RTLD_NOW|RTLD_LOCAL)从可执行文件加载的。从foo.so我想dlopen另一个库bar.so,它引用foo.so中定义的符号,但链接器找不到它们。我无法将RTLD_LOCAL更改为RTLD_GLOBAL,因为我没有执行加载的可执行文件的源代码。我认为-Wl,--export-dynamic在链接foo.so时可能会有所帮助,但它不会覆盖dlopen的本地标志。GCC的新属性可见性功能看起来也无法提供答案。有没有一种方法可以指示链接器将对bar.so中undefinedsymbol的引用解析为

linux - 不扩展 $HOME 或 "~"的符号链接(symbolic link)?

基本思想是我想链接到相对于$HOME的路径,而不是显式扩展$HOME变量,因为我想确保链接在多台机器上有效,例如,当我这样做的时候ln-s~/datadatalnk我希望它被定向到目录/home/user/data在一台机器上有一个用户$HOME的/home/user,并到另一台机器上的/home/machine/user/data,该机器的用户$HOME为/home/machine/user/data。我无法在第二台机器上使用创建符号链接(symboliclink)ln-s/home/machine/user/home/user因为我没有这样做的权限,而且我无法链接相对路径,因为两台

linux - 如何避免二进制文件中的 STT_GNU_IFUNC 符号?

我需要部署到RedHat4.1.2box(它有gcc4.1.2)。我在Ubuntu11.10上使用GCC4.6.1进行开发。不幸的是,我的构建过程创建的一些二进制文件在RedHat机器上不可用。原因似乎是ABI更改,根据anotherStackoverflowquestion由于引入了STT_GNU_IFUNC符号。有没有办法阻止导出任何此类符号,以便我的二进制文件可以使用旧的ABI?我使用nm在我的二进制文件中查找任何“i”类型的符号,但没有找到。我问这个是因为我的其他一些二进制文件以及我构建的一些第3方库(tbb、boost)没有使用新的ABI,因此在RedHat机器上运行良好。希