GVKun编程网logo

linux – glibc编译的CentOS 6.7程序,它们也可以在CentOS 5.10上运行吗?(centos6 glibc2.17)

8

如果您对linux–glibc编译的CentOS6.7程序,它们也可以在CentOS5.10上运行吗?和centos6glibc2.17感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解linux

如果您对linux – glibc编译的CentOS 6.7程序,它们也可以在CentOS 5.10上运行吗?centos6 glibc2.17感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解linux – glibc编译的CentOS 6.7程序,它们也可以在CentOS 5.10上运行吗?的各种细节,并对centos6 glibc2.17进行深入的分析,此外还有关于c# – Microsoft XNA可以在Windows 10上运行吗?、cephfs linux kernel client 针对 linux page cache 的操作、EasyWSL工具将 Linux Docker 映像转换为适用于 Linux 的、ld:在 /buildtools/linux/x86-32 中找不到 /buildtools/linux/x86-32/usr/i686-linux-gnu/lib/libc.so.6的实用技巧。

本文目录一览:

linux – glibc编译的CentOS 6.7程序,它们也可以在CentOS 5.10上运行吗?(centos6 glibc2.17)

linux – glibc编译的CentOS 6.7程序,它们也可以在CentOS 5.10上运行吗?(centos6 glibc2.17)

我们有一个网格计算环境,主要由CentOS 5.10主机组成,人们可以编译应用程序然后运行它们.

我们正在考虑升级到CentOS 6.7,我们想知道它上面的glibc是否会与CentOS 5.10向后兼容,因为我们无法一次性推出升级(例如,可能会发生有人编译的情况) 6.7然后将编译调度到5.10主机执行).

基本上,CentOS 6.7上的glibc编译程序在CentOS 5.10上运行吗?

我们已经看过5.7的glibc来源(不记得正确的版本),我们认为它应该是但希望得到第二个意见.

解决方法

CentOS 5和6之间的ABI不保证完全相同.这意味着您的程序可能会起作用,但这根本不确定.此外,任何软件包/ libs升级都可以阻止您的应用程序工作.

换句话说,我强烈建议你不要走这条路.

c# – Microsoft XNA可以在Windows 10上运行吗?

c# – Microsoft XNA可以在Windows 10上运行吗?

我使用C#和Microsoft XNA 4.0创建了一个游戏.它适用于 Windows 8和8.1,但是我的朋友尝试将其下载到运行Windows 10的计算机上,发现它无法打开.尝试打开时,它甚至不会出现在任务管理器中.有问题的计算机上安装了Microsoft XNA Framework Redistributable 4.0,因此它应该正常工作. Windows 10是否与XNA不兼容?

解决方法

新版本的Windows不再支持XNA,它已经停产,并且在比Windows 7更新的平台上不受支持.幸运的是,XNA的开源实现基本上完全相同,并且目前在所有窗口上都支持版本.它被称为“MonoGame”,这是他们网站的链接:

http://www.monogame.net/

cephfs linux kernel client 针对 linux page cache 的操作

cephfs linux kernel client 针对 linux page cache 的操作

针对 linux page cache 的操作主要体现在 struct address_space_operations 数据结构中,cephfs 处理 linux page cache 的函数集合如下:

const struct address_space_operations ceph_aops = {

        .readpage = ceph_readpage,

        .readpages = ceph_readpages,

        .writepage = ceph_writepage,

        .writepages = ceph_writepages_start,

        .write_begin = ceph_write_begin,

        .write_end = ceph_write_end,

        .set_page_dirty = ceph_set_page_dirty,

        .invalidatepage = ceph_invalidatepage,

        .releasepage = ceph_releasepage,

        .direct_IO = ceph_direct_io,

};

 

ceph_readpage(struct file *filp, struct page *page)

|__调用 readpage_nounlock (filep, page)     在加锁的情况下读取一个物理内存页的数据

    |__确定 page 的 offset 没有超出 inode 的总长度

    |__调用 ceph_readpage_from_fscache () 函数尝试从 fscache 中读取一个物理内存页的数据

        |__若读取成功则直接返回

    |__调用 ceph_osdc_readpages () 函数从 ceph 集群中读取一个物理内存页的数据

        |__调用 ceph_osdc_new_reqeust () 函数创建一个读请求

        |__调用 osd_req_op_extent_osd_data_pages () 函数为读请求的返回内容分配内存空间

        |__调用 ceph_osdc_start_request () 函数将读请求同步发送给 ceph 集群

    |__调用 flush_dcache_page () 函数刷 page 到 dcache 中

    |__调用 SetPageUptodate () 函数设置物理内存页的状态是 update 的

    |__调用 ceph_readpage_to_fscache () 函数将新读到的物理内存页更新到 fscache 中

|__调用 unlock_page (page)

    |__调用 clear_bit_unlock () 函数为 page 解锁

    |__调用 wake_up_page () 函数唤醒等待该 page 的相关进程

 

ceph_readpages (struct file *file, struct address_space *mapping, struct list_head *page_list, unsigned nr_pages)    读取多个页

|__调用 ceph_readpages_from_fscache () 函数尝试从 fscache 中读取多个物理内存页的数据

    |__若读取成功则直接返回

|__遍历 page_list

    |__调用 start_read () 函数读取数据到 page_list 所包含的物理内存页

        |__调用 ceph_osdc_new_reqeust () 函数创建一个读请求

        |__调用 calc_pages_for (0, len) 函数得到读取指定长度 len 的数据需要的物理内存页数

        |__从 page_list 中摘下指定数量的物理内存页

        |__调用 osd_req_op_extent_osd_data_pages () 函数将从 page_list 中摘下的物理内存页作为读请求的接收缓冲

        |__设置读请求完成后的回调函数为 finish_read ()

        |__调用 ceph_osdc_start_request () 函数将读请求同步发送给 ceph 集群

 

finish_read (struct ceph_osd_request *req)        从 ceph 集群中读操作结束后的回调函数

|__遍历读取到的所有物理内存页

    |__调用 flush_dcache_page () 函数将 page 中的内存刷到 dcache 中

    |__调用 SetPageUptodate () 函数设置 page 的状态是 uptodate 的

    |__调用 ceph_readpage_to_fscache () 函数将读取到的 page 内存同步到 fscache 中

 

ceph_writepage(struct page *page, struct writeback_control *wbc)

|__调用 writepage_nounlock (page,wbc) 函数同步 page 信息到 ceph 集群

    |__调用 page_snap_context () 函数得到 page 的 snap context 信息 (page 将 CephSnapContext 信息写入到 page 的 private 中)

    |__调用 set_page_writeback (page) 函数设置 page writeback 标识

    |__调用 ceph_osdc_writepages () 函数将 page 信息同步写到 ceph 集群

        |__调用 ceph_osdc_new_reqeust () 函数创建一个写请求

        |__调用 osd_req_op_extent_osd_data_pages () 函数为写请求设置写内容物理内存页

        |__调用 ceph_osdc_start_request () 函数将写请求同步发送给 ceph 集群

    |__设置 page->private=0,即:删除 page 的 CephSnapContext 信息

    |__调用 ClearPagePrivate (page) 函数清空 page 的 private

    |__调用 end_page_writeback () 函数

        |__调用 wake_up_page (page, PG_writeback) 函数唤醒在 page 上等待 writeback 完成的进程

 

ceph_writepages_start(struct address_space *mapping, struct writeback_control *wbc)

|__调用 pagevec_init (&pvec, 0) 函数初始化 struct pagevec 实例 pvec

|__从 wbc 的 range_start 和 range_end 中得到 start 和 end

|__调用 pagevec_lookup_tag (&pvec, mapping, PAGECACHE_TAG_DIRTY…) 函数从 mapping 中 radix tree 中找到 tags==PAGECACHE_TAG_DIRTY 的所有 pages 且将所有 pages 写入到 pvec 中

|__遍历所有 PAGECACHE_TAG_DIRTY 的 pages

    |__调用 page_offset () 函数得到 page 所在的 offset 值

    |__调用 ceph_calc_file_object_mapping () 函数得到从 offset 开始,长度是 len 的文件所占用的 objects 个数以及在 object 中的偏移

    |__将 page 添加到 pages 数组中

|__从 pages 数组中得到 offset 值,即:offset=page_offset (pages [0])

|__调用 ceph_osdc_new_request () 函数创建一个写数据请求

|__设置写数据请求的回调函数为 writepages_finish

|__调用 osd_req_op_extent_osd_data_pages () 函数添加写请求额外的数据

|__调用 ceph_osdc_start_request () 函数将写请求同步发送到 ceph 集群

 

writepages_finish(struct ceph_osd_request *req)

|__清除所有在发送写请求过程中产生的内存

 

ceph_write_begin(struct file *file, struct address_space *mapping, loff_t pos, unsigned len, unsigend flags, staruct page **pagep, void **fsdata)

|__得到 pos 所在的 page 位置,即:index=pos >> PAGE_SHIFT

|__调用 grab_cache_page_write_begin (mapping, index, flags) 函数在 pagecache 中指定位置 index 出获取或创建一个物理内存页 page

    |__调用 pagecache_get_page () 函数在 pagecache 中指定位置 index 出获取或创建一个物理内存页 page

    |__调用 wait_for_stable_page (page) 函数等待该 page 上的 writeback 函数返回

|__调用 ceph_update_writeable_page (file, pos, len, page) 函数只允许往 clean page 里写入数据或者已经 dirty 的 snap context 里写入数据

    |__调用 wait_on_page_writeback (page) 函数等待 page 的 writeback 完成

    |__调用 page_snap_context (page) 函数得到该 page 的 snap context

    |__若 snap context 的 seq > oldest->seq

        |__调用 ceph_queue_writeback (inode) 函数将 inode 放入到 writeback 队列中

    |__调用 clear_page_dirty_for_io (page) 函数清除 page 上的 dirty 标识

    |__调用 writepage_nounlock (page, NULL) 函数将 page 数据同步的写入到 ceph 集群

    |__调用 PageUptodate (page) 检查 page 是否是 uptodate 的

        |__是则直接返回

    |__若 page 已经满了

        |__直接返回

    |__调用 i_size_read (inode) 函数得到 inode 的读数据的大小

    |__调用 readpage_nounlock (file, page) 函数从 ceph 集群中读取数据到 page 中

 

ceph_write_end(struct file *file, struct address_space *mapping, loff_t pos, unsigned len, unsigned copied, struct page **page, void *fsdata)

|__若 copied < len

    |__调用 zero_user_segment (page, from+copied, len) 函数将 page 中从 from+copied 一直到 from+copied+len 的内存空间置 0

|__若 pos+copied > i_size_read (inode)

    |__调用 ceph_inode_set_size () 函数设置 inode 的 size 为 pos+copied

|__若 Page 不是 uptodate 的

    |__调用 SetPageUptodate (page) 函数设置 page 是 uptodate 的

|__调用 set_page_dirty (page) 函数设置 page 是 dirty 的

 

ceph_set_page_dirty(struct page *page)

|__若 PageDirty (page)

    |__直接返回

|__通过 mapping 的到 struct ceph_inode_info 结构

|__调用__ceph_have_pending_cap_snap () 函数检查 cephfs 是否有 snaps

    |__从 struct ceph_inode_info 结构中的 i_cap_snaps 列表中得到 struct ceph_cap_snap 结构

    |__从 struct ceph_cap_snap 结构中得到 struct ceph_snap_context 结构

|__若 cephfs 没有 snaps

    |__调用 ceph_get_snap_context () 函数从 struct ceph_inode_info 的 i_head_spapc 中得到 struct ceph_snap_context 结构

|__将 struct ceph_snap_context 结构设置到 page 的 private 中,即:page->private=snapc

|__调用__set_page_dirty_nobuffers () 函数将 page 在 address_spaces 中的 radix tree 中设置成 dirty

 

ceph_invalidatepage(struct page *page, unsigned int offset, unsigned int length)

|__调用 ceph_invalidate_fscache_page () 函数使得 page 在 fscache 中无效

|__若 page 没有 private

    |__直接返回

|__设置 page->private=0 清除 page 的 snaps

|__调用 ClearPagePriavte (page)

 

ceph_releasepage(struct page *page, gfp_t g)

|__调用 ceph_release_fscache_page () 函数在 fscache 中删除 page

|__返回!PagePrivate (page)

 

ceph_direct_io(struct kiocb *iocb, struct iov_iter *iter)

|__返回 - EINVAL

EasyWSL工具将 Linux Docker 映像转换为适用于 Linux 的

EasyWSL工具将 Linux Docker 映像转换为适用于 Linux 的

适用于 Linux 的 Windows 子系统允许管理员直接从 Windows 访问基于 Linux 的工具,但并非每个 Linux 发行版都可以通过 Microsoft Store 获得。

现在有一个名为 EasyWSL 的新工具可以将几乎任何 Linux Docker 映像转换为 WSL 发行版。

EasyWSL 由网络安全公司 Red Code Labs 创建。

“我觉得我们可以通过 WSL 以某种方式将更多的 Linux 灵魂带入 Windows,这比微软在他们的商店中提供的更多,” Red Code Labs 解释道。

EasyWSL 在从 Microsoft Store 获取图像方面也具有一些优势,因为这些图像通常由 3rd 方提供,因此可能已被更改。

“基本上,一开始尝试使用 Arch 和 Gentoo 及其存储库是一个好主意,但后来我意识到,为什么不以某种方式从 Docker Hub 获取图像,以扩大可能性。”

WSL 用户现在可以直接从原始维护者那里下载 Docker 镜像,并且知道构建没有以任何方式改变。

EasyWSL 是一个开源工具。

ld:在 /buildtools/linux/x86-32 中找不到 /buildtools/linux/x86-32/usr/i686-linux-gnu/lib/libc.so.6

ld:在 /buildtools/linux/x86-32 中找不到 /buildtools/linux/x86-32/usr/i686-linux-gnu/lib/libc.so.6

如何解决ld:在 /buildtools/linux/x86-32 中找不到 /buildtools/linux/x86-32/usr/i686-linux-gnu/lib/libc.so.6

在 Ubuntu 20.10 上使用 GCC 10.2.0、glibc 2.32 和 binutils 2.35.1 为 Linux 64 位编译 GCC 10.2.0 Linux 32 位交叉编译器。我收到了这个错误,似乎 GCC 通过找到让我搞砸的方法来阻止我获得交叉编译器。 (我是构建它而不是从 apt 下载它,因为你不能同时安装 multilib GCC 和交叉编译器)

/projects/gcc-linux-x86-32/./gcc/xgcc -B/projects/gcc-linux-x86-32/./gcc/ -B/buildtools/linux/x86-32/usr/i686-linux-gnu/bin/ -B/buildtools/linux/x86-32/usr/i686-linux-gnu/lib/ -isystem /buildtools/linux/x86-32/usr/i686-linux-gnu/include -isystem /buildtools/linux/x86-32/usr/i686-linux-gnu/sys-include    -O2  -O3 -DIN_GCC  -DCROSS_DIRECTORY_STRUCTURE  -W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual -Wno-error=format-diag -Wstrict-prototypes -Wmissing-prototypes -Wno-error=format-diag -Wold-style-deFinition  -isystem ./include  -fpic -mlong-double-80 -DUSE_ELF_SYMVER  -g -DIN_LIBGCC2 -fbuilding-libgcc -fno-stack-protector  -shared -nodefaultlibs -Wl,--soname=libgcc_s.so.1 -Wl,--version-script=libgcc.map -o ./libgcc_s.so.1.tmp -O3 -B./ _muldi3_s.o _negdi2_s.o _lshrdi3_s.o _ashldi3_s.o _ashrdi3_s.o _cmpdi2_s.o _ucmpdi2_s.o _clear_cache_s.o _trampoline_s.o __main_s.o _absvsi2_s.o _absvdi2_s.o _addvsi3_s.o _addvdi3_s.o _subvsi3_s.o _subvdi3_s.o _mulvsi3_s.o _mulvdi3_s.o _negvsi2_s.o _negvdi2_s.o _ctors_s.o _ffssi2_s.o _ffsdi2_s.o _clz_s.o _clzsi2_s.o _clzdi2_s.o _ctzsi2_s.o _ctzdi2_s.o _popcount_tab_s.o _popcountsi2_s.o _popcountdi2_s.o _paritysi2_s.o _paritydi2_s.o _powisf2_s.o _powidf2_s.o _powixf2_s.o _powitf2_s.o _mulhc3_s.o _mulsc3_s.o _muldc3_s.o _mulxc3_s.o _multc3_s.o _divhc3_s.o _divsc3_s.o _divdc3_s.o _divxc3_s.o _divtc3_s.o _bswapsi2_s.o _bswapdi2_s.o _clrsbsi2_s.o _clrsbdi2_s.o _fixunssfsi_s.o _fixunsdfsi_s.o _fixunsxfsi_s.o _fixsfdi_s.o _fixdfdi_s.o _fixxfdi_s.o _fixunssfdi_s.o _fixunsdfdi_s.o _fixunsxfdi_s.o _floatdisf_s.o _floatdidf_s.o _floatdixf_s.o _floatundisf_s.o _floatundidf_s.o _floatundixf_s.o _divdi3_s.o _moddi3_s.o _divmoddi4_s.o _udivdi3_s.o _umoddi3_s.o _udivmoddi4_s.o _udiv_w_sdiv_s.o cpuinfo_s.o tf-signs_s.o sfp-exceptions_s.o addtf3_s.o divtf3_s.o eqtf2_s.o getf2_s.o letf2_s.o multf3_s.o negtf2_s.o subtf3_s.o unordtf2_s.o fixtfsi_s.o fixunstfsi_s.o floatsitf_s.o floatunsitf_s.o fixtfdi_s.o fixunstfdi_s.o floatditf_s.o floatunditf_s.o extendsftf2_s.o extenddftf2_s.o extendxftf2_s.o trunctfsf2_s.o trunctfdf2_s.o trunctfxf2_s.o enable-execute-stack_s.o unwind-dw2_s.o unwind-dw2-fde-dip_s.o unwind-sjlj_s.o unwind-c_s.o emutls_s.o libgcc.a -lc && rm -f ./libgcc_s.so && if [ -f ./libgcc_s.so.1 ]; then mv -f ./libgcc_s.so.1 ./libgcc_s.so.1.backup; else true; fi && mv ./libgcc_s.so.1.tmp ./libgcc_s.so.1 && (echo "/* GNU ld script"; echo "   Use the shared library,but some functions are only in"; echo "   the static library.  */"; echo "GROUP ( libgcc_s.so.1 -lgcc )" ) > ./libgcc_s.so
/buildtools/linux/x86-32/usr/i686-linux-gnu/bin/ld: cannot find /buildtools/linux/x86-32/usr/i686-linux-gnu/lib/libc.so.6 inside /buildtools/linux/x86-32
/buildtools/linux/x86-32/usr/i686-linux-gnu/bin/ld: cannot find /buildtools/linux/x86-32/usr/i686-linux-gnu/lib/libc_nonshared.a inside /buildtools/linux/x86-32
/buildtools/linux/x86-32/usr/i686-linux-gnu/bin/ld: cannot find /buildtools/linux/x86-32/usr/i686-linux-gnu/lib/ld-linux.so.2 inside /buildtools/linux/x86-32
collect2: error: ld returned the exit status 1
make[2]: *** [Makefile:994: libgcc_s.so] Error 1
make[2]: exiting the directory ''/projects/gcc-linux-x86-32/i686-linux-gnu/libgcc''
make[1]: *** [Makefile:13737: all-target-libgcc] Error 2
make[1]: exiting the directory ''/projects/gcc-linux-x86-32''
make: *** [Makefile:962: all] Error 2

链接器“找不到”的所有文件实际上都存在。

需要的东西是here,因为如果我把它放在这里,StackOverflow 不允许我发布它。如果您有编辑功能,请在其中进行编辑。

关于linux – glibc编译的CentOS 6.7程序,它们也可以在CentOS 5.10上运行吗?centos6 glibc2.17的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于c# – Microsoft XNA可以在Windows 10上运行吗?、cephfs linux kernel client 针对 linux page cache 的操作、EasyWSL工具将 Linux Docker 映像转换为适用于 Linux 的、ld:在 /buildtools/linux/x86-32 中找不到 /buildtools/linux/x86-32/usr/i686-linux-gnu/lib/libc.so.6的相关知识,请在本站寻找。

本文标签: