我们有一个强大的服务器来编译任何代码。由于某些原因,我通常不允许将我的文件复制到服务器,并且当我可以时,我只能使用/temp
重启后将被删除的文件。不得不复制文件,编译代码并将输出包复制到我的个人机器上,这真的很烦人,只是为了让文件在重新启动时被删除。
是否可以向服务器发送请求(从我的具有文件的机器,例如命令gcc test.c -o output.file
:)并将输出重定向回我的机器。
服务器正在运行 FreeBSD 12.1
我们有一个强大的服务器来编译任何代码。由于某些原因,我通常不允许将我的文件复制到服务器,并且当我可以时,我只能使用/temp
重启后将被删除的文件。不得不复制文件,编译代码并将输出包复制到我的个人机器上,这真的很烦人,只是为了让文件在重新启动时被删除。
是否可以向服务器发送请求(从我的具有文件的机器,例如命令gcc test.c -o output.file
:)并将输出重定向回我的机器。
服务器正在运行 FreeBSD 12.1
我正在尝试编译我从一个开发者网站获得的源代码,该网站公开了他的个人小型 MMO,在尝试编译时我得到:
gcc -O -g -m32 -rdynamic -L/usr/lib/mysql -o server .obj/server.o .obj/io.o .obj/libload.o .obj/tool.o .obj/sleep.o .obj/log.o .obj/create.o .obj/notify.o .obj/skill.o .obj/do.o .obj/act.o .obj/player.o .obj/rdtsc.o .obj/los.o .obj/light.o .obj/map.o .obj/path.o .obj/error.o .obj/talk.o .obj/drdata.o .obj/death.o .obj/database.o .obj/see.o .obj/drvlib.o .obj/timer.o .obj/expire.o .obj/effect.o .obj/command.o .obj/date.o .obj/container.o .obj/store.o .obj/mem.o .obj/sector.o .obj/chat.o .obj/statistics.o .obj/mail.o .obj/player_driver.o .obj/clan.o .obj/lookup.o .obj/area.o .obj/task.o .obj/punish.o .obj/depot.o .obj/prof.o .obj/motd.o .obj/ignore.o .obj/tell.o .obj/clanlog.o .obj/respawn.o .obj/poison.o .obj/swear.o .obj/lab.o .obj/consistency.o .obj/btrace.o .obj/club.o .obj/teufel_pk.o .obj/questlog.o .obj/badip.o -lmysqlclient -lm -lz -ldl -lpthread
/usr/bin/ld: cannot find -lmysqlclient
我跑过:
sudo apt-get install libmysqlclient-dev
我在 Ubuntu 14.04 LTS 上,任何信息都会非常感谢。
编辑:
ubuntu@va~/astonia3_server$ ls /usr/lib
lib/ lib32/ libx32/
ubuntu@va:~/astonia3_server$ ls /usr/lib/libmysql*
ls: cannot access /usr/lib/libmysql*: No such file or directory
ubuntu@va:~/astonia3_server$ ls /usr/lib64/libmysql*
ls: cannot access /usr/lib64/libmysql*: No such file or directory
编辑2:
/usr/share/doc/libmysqlclient-dev
/usr/share/doc/libmysqlclient18
/usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0
/usr/lib/x86_64-linux-gnu/libmysqlclient.a
/usr/lib/x86_64-linux-gnu/libmysqlclient_r.so
/usr/lib/x86_64-linux-gnu/libmysqlclient_r.a
/usr/lib/x86_64-linux-gnu/libmysqlclient.so.18
/usr/lib/x86_64-linux-gnu/libmysqlclient_r.so.18
/usr/lib/x86_64-linux-gnu/libmysqlclient.so
/usr/lib/x86_64-linux-gnu/libmysqlclient_r.so.18.0.0
我在 CentOS 6.x 上编译了 Apache httpd。在那里工作正常。
然后我将二进制文件移动到 CentOS 7。我需要安装一些缺少的库,现在在那里工作正常。
然后我将二进制文件移动到 Archlinux。正如我所料,它并没有直接开始:
httpd: symbol lookup error: /software_pack/httpd-2.2.25/lib/libapr-1.so.0: undefined symbol: dlopen
但是,如果我这样做ldd /software_pack/httpd-2.2.25/lib/libapr-1.so.0
,它会在 CentOS 和 Archlinux 上给出不同的结果。在 Archlinux 上,libdl.so 根本不显示?
CentOS 从哪里知道文件需要 libdl.so.2 ?
CentOS 6.x:
# ls -la /software_pack/httpd-2.2.25/lib/libaprutil-1.so.0
lrwxrwxrwx 1 root root 21 Jul 30 09:47 /software_pack/httpd-2.2.25/lib/libaprutil-1.so.0 -> libaprutil-1.so.0.5.2
# ldd /software_pack/httpd-2.2.25/lib/libaprutil-1.so.0.5.2
linux-vdso.so.1 => (0x00007fffec400000)
libexpat.so.0 => /software_pack/httpd-2.2.25/lib/libexpat.so.0 (0x00007f5ec94d8000)
libapr-1.so.0 => /software_pack/httpd-2.2.25/lib/libapr-1.so.0 (0x00007f5ec92a8000)
librt.so.1 => /lib64/librt.so.1 (0x00007f5ec9098000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f5ec8e60000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f5ec8c40000)
libc.so.6 => /lib64/libc.so.6 (0x00007f5ec88a8000)
/lib64/ld-linux-x86-64.so.2 (0x00007f5ec9928000)
libfreebl3.so => /lib64/libfreebl3.so (0x00007f5ec8630000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f5ec8428000) <<<<<<<< Missing in arch
在 Archlinux 上:
# ls -la /software_pack/httpd-2.2.25/lib/libaprutil-1.so.0
lrwxrwxrwx 1 root root 21 Jul 30 10:47 /software_pack/httpd-2.2.25/lib/libaprutil-1.so.0 -> libaprutil-1.so.0.5.2
# ldd /software_pack/httpd-2.2.25/lib/libaprutil-1.so.0.5.2
linux-vdso.so.1 (0x00007fff7cdd3000)
libexpat.so.0 => /software_pack/httpd-2.2.25/lib/libexpat.so.0 (0x00007f5aef4e7000)
libapr-1.so.0 => /software_pack/httpd-2.2.25/lib/libapr-1.so.0 (0x00007f5aef2ba000)
librt.so.1 => /usr/lib/librt.so.1 (0x00007f5aef084000)
libcrypt.so.1 => /usr/lib/libcrypt.so.1 (0x00007f5aeee4b000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f5aeec2d000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f5aee87f000)
/usr/lib64/ld-linux-x86-64.so.2 (0x00007f5aef934000)
我要重建我的服务器,我想知道我应该安装 GCC 32 还是 64 位。我用 Python 开发,我使用了一些可以从 64 位 GCC 安装中受益的库,但我不确定我是否会遇到其他程序/库的问题。你觉得呢?你有没有什么想法?
我正在尝试构建 pdftk,这显然需要 gcj。由于它不在我的路径中,我可以将保存 gcj 的目录添加到我的路径中,或者在预制的 Makefile 中定义路径。
问题是我不知道:
a)gcj 在哪里,b)它是否存在于服务器上(至少以我可以添加到路径的方式)。
在我之前从源代码构建二进制文件的尝试中,这个问题不止一次出现,所以我希望我可以一次提出两个问题来解决我当前的问题并在未来避免这个问题......
有没有办法将我拥有读取/执行权限的所有内容添加到我的路径中?子问题,这是一个坏主意吗?
whereis
只搜索我的路径吗?是否有一些等效的方法可以查找我需要的文件/目录,而无需搜索整个主机并拒绝访问所有其他目录?
有没有一种方法可以确定库/二进制文件是否绝对不可用,而只是不在我的路径中?
有没有办法告诉,特别是gcc
如果gcj
可用?
我可以将 gcj 编译到我的用户目录而不必用它编译所有 gcc 吗?
在构建二进制文件时,是否有一种(通用)方法来标记编译或生成文件以处理任何依赖项,因为它发现它们而不是简单地失败?
共享主机情况下的典型用户是否能够使用操作系统包库在用户级别获取包?
是否可以在机器上没有 ac 编译器的情况下构建 gcc?如果是这样,怎么做?