Всем привет. Имею в файле t.cpp код:#include "stdio.h"
int main(int argc, char* argv[])
{
printf("Started");
return 0;
}При компиляции ничего не выводится:
# g++ t.cpp
#При запуске тоже:
# ./a.out
#Хотя такая же последовательность действий на другой машине приводит к другому результату:
# g++ wmsigner.cpp
# ./a.out
Started
#Может поможет эта информация:
[]# g++ -v t.cpp
Reading specs from /usr/lib/gcc/i386-redhat-linux/3.4.2/specs
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-java-awt=gtk --host=i386-redhat-linux
Thread model: posix
gcc version 3.4.2 20041017 (Red Hat 3.4.2-6.fc3)
/usr/libexec/gcc/i386-redhat-linux/3.4.2/cc1plus -quiet -v -D_GNU_SOURCE t.cpp -quiet -dumpbase t.cpp -auxbase t -version -o /tmp/ccbVPb1V.s
ignoring nonexistent directory "/usr/lib/gcc/i386-redhat-linux/3.4.2/../../../../i386-redhat-linux/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/lib/gcc/i386-redhat-linux/3.4.2/../../../../include/c++/3.4.2
/usr/lib/gcc/i386-redhat-linux/3.4.2/../../../../include/c++/3.4.2/i386-redhat-linux
/usr/lib/gcc/i386-redhat-linux/3.4.2/../../../../include/c++/3.4.2/backward
/usr/local/include
/usr/lib/gcc/i386-redhat-linux/3.4.2/include
/usr/include
End of search list.
GNU C++ version 3.4.2 20041017 (Red Hat 3.4.2-6.fc3) (i386-redhat-linux)
compiled by GNU C version 3.4.2 20041017 (Red Hat 3.4.2-6.fc3).
GGC heuristics: --param ggc-min-expand=47 --param ggc-min-heapsize=32014
as -V -Qy -o /tmp/ccalfGWP.o /tmp/ccbVPb1V.s
GNU assembler version 2.15.92.0.2 (i386-redhat-linux) using BFD version 2.15.92.0.2 20040927
/usr/libexec/gcc/i386-redhat-linux/3.4.2/collect2 --eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 /usr/lib/gcc/i386-redhat-linux/3.4.2/../../../crt1.o /usr/lib/gcc/i386-redhat-linux/3.4.2/../../../crti.o /usr/lib/gcc/i386-redhat-linux/3.4.2/crtbegin.o -L/usr/lib/gcc/i386-redhat-linux/3.4.2 -L/usr/lib/gcc/i386-redhat-linux/3.4.2 -L/usr/lib/gcc/i386-redhat-linux/3.4.2/../../.. /tmp/ccalfGWP.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/i386-redhat-linux/3.4.2/crtend.o /usr/lib/gcc/i386-redhat-linux/3.4.2/../../../crtn.o
[]#По мне так должна либо ругань быть при компиляции, либо результат какой-либо. А то ни того, ни другого. Программа-то на уровне "привет, мир", не должна она слишком сложно компилироваться.
Спасибо.
а что говорят ltrace/strace в первом случае?
Вот:
==========================
[]# ltrace ./a.out
__libc_start_main(0x8048420, 1, 0xfee32bb4, 0x8048454, 0x80484a8 <unfinished ...>
printf("Started") = 7
+++ exited (status 0) +++
[]#
==========================
Это хорошо или плохо?
Дал поболее ключей и получил больше информации, которая говорит мне ни о чем - я и о ltrace'е первый раз в жизни услышал. Может вам что-нибудь скажет:
==============================
[root@dvlp stdio.blin]# ltrace -C -i -S ./a.out
[0x9d86bd] SYS_uname(0xfeee340c) = 0
[0x9d722b] SYS_brk(NULL) = 0x8c23000
[0x9d7fd1] SYS_access(0x9d9386, 4, 0x9dcfb4, 0x9d9386, 4) = -2
[0x9d7e94] SYS_open("/etc/ld.so.cache", 0, 00) = 3
[0x9d7d9b] SYS_fstat64(3, 0xfeee2b58, 0x9dcfb4, 0x9dd4d8, 0) = 0
[0x9d85fd] SYS_mmap(0xfeee2b38, 2, 0x9dcfb4, 3, 0) = 0xf6ff9000
[0x9d7ecd] SYS_close(3) = 0
[0x9d7e94] SYS_open("/usr/lib/libstdc++.so.6", 0, 00) = 3
[0x9d7f14] SYS_read(3, "\177ELF\001\001\001", 512) = 512
[0x9d7d9b] SYS_fstat64(3, 0xfeee2be8, 0x9dcfb4, 0x9dd4d8, 0) = 0
[0x9d85fd] SYS_mmap(0xfeee2aa4, 5, 0x9dcfb4, 0xfeee2ae0, 0xfeee2b10) = 0x137000
[0x9d85fd] SYS_mmap(0xfeee2aa4, 0, 0x9dcfb4, 0xfeee2af8, 0x1f8000) = 0x1f8000
[0x9d85fd] SYS_mmap(0xfeee2aa4, 21172, 0x9dcfb4, 0xfeee2af8, 50) = 0x1fd000
[0x9d7ecd] SYS_close(3) = 0
[0x9d7e94] SYS_open("/lib/tls/libm.so.6", 0, 047355040) = 3
[0x9d7f14] SYS_read(3, "\177ELF\001\001\001", 512) = 512
[0x9d7d9b] SYS_fstat64(3, 0xfeee2bcc, 0x9dcfb4, 0x9dd4d8, 0) = 0
[0x9d85fd] SYS_mmap(0xfeee2a40, 5, 0x9dcfb4, 0xfeee2a80, 0xfeee2ab0) = 0xb09000
[0x9d85fd] SYS_mmap(0xfeee2a40, 0, 0x9dcfb4, 0xfeee2a98, 0xb2a000) = 0xb2a000
[0x9d7ecd] SYS_close(3) = 0
[0x9d7e94] SYS_open("/lib/libgcc_s.so.1", 0, 047356260) = 3
[0x9d7f14] SYS_read(3, "\177ELF\001\001\001", 512) = 512
[0x9d7d9b] SYS_fstat64(3, 0xfeee2bb0, 0x9dcfb4, 0x9dd4d8, 0) = 0
[0x9d85fd] SYS_mmap(0xfeee2a64, 34, 0x9dcfb4, 4096, 602) = 0xf6ff8000
[0x9d85fd] SYS_mmap(0xfeee2a6c, 5, 0x9dcfb4, 0xfeee2aa0, 0xfeee2ad0) = 0xb76000
[0x9d85fd] SYS_mmap(0xfeee2a6c, 0, 0x9dcfb4, 0xfeee2ab8, 0xb7d000) = 0xb7d000
[0x9d7ecd] SYS_close(3) = 0
[0x9d7e94] SYS_open("/lib/tls/libc.so.6", 0, 036677700000) = 3
[0x9d7f14] SYS_read(3, "\177ELF\001\001\001", 512) = 512
[0x9d7d9b] SYS_fstat64(3, 0xfeee2b94, 0x9dcfb4, 0x9dd4d8, 0) = 0
[0x9d85fd] SYS_mmap(0xfeee29d8, 5, 0x9dcfb4, 0xfeee2a10, 0xfeee2a40) = 0x9e0000
[0x9d85fd] SYS_mmap(0xfeee29d8, 0, 0x9dcfb4, 0xfeee2a28, 0xb01000) = 0xb01000
[0x9d85fd] SYS_mmap(0xfeee29d8, 7404, 0x9dcfb4, 0xfeee2a28, 50) = 0xb05000
[0x9d7ecd] SYS_close(3) = 0
[0x9d85fd] SYS_mmap(0xfeee30b4, 34, 0x9dcfb4, 4096, 2832) = 0xf6ff7000
[0x9d8684] SYS_mprotect(0xb01000, 8192, 1, 0xf6ff8290, 0) = 0
[0x9d8684] SYS_mprotect(0xb2a000, 4096, 1, 0x9ddcb0, 0) = 0
[0x9d8684] SYS_mprotect(0x9dc000, 4096, 1, 0x9dd1c0, 0) = 0
[0x9c975c] SYS_set_thread_area(0xfeee3334, 81, 0xf6ff76c0, 0x9dcfb4, -1) = 0
[0x9d8641] SYS_munmap(0xf6ff9000, 28364) = 0
[0x8048399] __libc_start_main(0x8048420, 1, 0xfeee3664, 0x8048454, 0x80484a8 <unfinished ...>
[0x8048449] printf("Started" <unfinished ...>
[0x9c77a2] SYS_fstat64(1, 0xfeee2e7c, 0xb02ff4, 0xb035c0, 8192) = 0
[0x9c77a2] SYS_mmap2(0, 4096, 3, 34, -1) = 0xf6fff000
[0x8048449] <... printf resumed> ) = 7
[0x9c77a2] SYS_write(1, "Started", 7Started) = 7
[0x9c77a2] SYS_munmap(0xf6fff000, 4096) = 0
[0x9c77a2] SYS_exit_group(0 <unfinished ...>
[0xffffffff] +++ exited (status 0) +++
[root@dvlp stdio.blin]#
==============================
А вот вообще интересно получается - перенес откомпилированный файл в /tmp/... и он заработал. Перенес тот же файл обратно (/home/apache/...)- нет. Ни одного бита не изменилось ведь, а результаты разные. Пойду искать, что такое SELinux.
Не запускается файл, который отзывается на команду# ls -laZ
таким образом:
-rwxr-xr-x root root root:object_r:httpd_sys_content_t a.out
Свою проблему решил просто - перенес необходимую программу в другой каталог. Не знаю, насколько это безопасно, но "у меня много работы, поэтому думать некогда" :(