Как вы строите для Basic 64-битной Amazon Linux из Arch Linux? - PullRequest
2 голосов
/ 07 ноября 2011

Я подумал, что это не сработает, но я просто загрузил свой программный файл с локального компьютера в новый экземпляр на Amazon EC2.Чем пытался его запустить:

[ec2-user@domU-12-31-39-14-2A-1A ~]$ ./webserver.net
-bash: ./webserver.net: /lib/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory

Видимо нет /lib/ld-linux-x86-64.so.2.Это 64-битный экземпляр.

Как мне скомпилировать / связать на локальном компьютере целевой экземпляр EC2.Я не хочу строить это на экземпляре.

Мой Makefile

OBJECTS= ./obj/hello.o
LDFLAGS = -L/usr/lib -lwt -lwthttp

./bin/webserver.net : $(OBJECTS)
    g++ -o ./bin/webserver.net $(OBJECTS) $(LDFLAGS)

./obj/hello.o : ./src/hello.cpp 
    g++ -c ./src/hello.cpp -o ./obj/hello.o 

.PHONY: clean

clean:
    -rm -f obj/*.o bin/webserver.net core *~ src/*~ 

Обновление Статически связанный файл.Были неопределенные ссылки, пока я не добавил каждую библиотеку вручную и в правильном порядке.Это необходимо?или я делаю это неправильно?

g++ -static -pthread -o ./bin/out.net ./obj/hello.o -lwthttp -lwt  -lboost_thread -lboost_system -lboost_program_options -lboost_random -lboost_signals -lboost_filesystem -lboost_regex -lboost_serialization -lboost_date_time -lssl -lcrypto -lz -ldl 

Ответы [ 2 ]

2 голосов
/ 07 ноября 2011

Уродливое, но простое решение может заключаться в статической привязке вашей программы.

Более сложным решением может быть имитация среды экземпляра EC2, например, среды chroot на вашем локальном компьютере.

Между ними вы можете скопировать / usr / include и /usr/lib/libc.so ... и т.д. в EC2 локально, но это рискованно.

Возможно, вы также можете скомпилироватьлокально, и ссылка на EC2 ... (но это может не работать)

1 голос
/ 07 ноября 2011

Динамическая библиотека lib*.so может быть построена с зависимостями от других динамических библиотек. (например, попробуйте ldd /usr/lib/libgtk-3.so или ldd в другой системной *.so библиотеке на вашем компьютере).

Статическая библиотека lib*.a, по сути, представляет собой смесь *.o объектных файлов и не знает ее зависимостей.

Так что при статическом соединении вам действительно нужно связать все библиотеки в правильном порядке.

...