2016-04-06 3 views
0

Я создал проект Yocto autotools в Eclipse (на основе проекта Hello World).Как связать статический lib с проектом yocto autotools в Eclipse

Я хотел разделить мой код на несколько библиотек, а затем связать их в виде статических libs (.a) в моем проекте.

Теперь у меня есть одно приложение и несколько статических библиотек. Однако, независимо от того, что я пытаюсь, я не могу получить свой код для компиляции. Каждый отдельный lib компилирует и создает файл .a, но у моего приложения нет.

После поиска в Интернете у меня есть возможное решение - добавить прямую ссылку на мой статический LIBS:

MyApp_CPPFLAGS="-I$LOCATION" 
MyApp_LDADD="/home/xxx/workspace/MyApp/Encoding2/Debug/libEncoding2.a" 

Это мой Makefile.am файл, где libEncoding2.a существуют в этом пути.

Ошибки я получаю:

make[2]: *** No rule to make target `"/home/xxx/workspace/MyApp/Encoding2/Debug/libEncoding2.a"', needed by `MyApp'. Stop. 

Я уже построил LIB, так что я не знаю, почему делают попытки даже необходимо.

Любая помощь будет оценена по достоинству.

ответ

0

В зависимости от того, используете ли вы libtool или нет, у вас должен быть либо список целей, либо , либо noinst_LIBRARIES. Это должно включать в себя только имя вашей библиотеки (libEncoding2.la или libEncoding2.a.)

Вы никогда не должны использовать полный путь для этого, и вы должны не цитаты сделать переменную, так что вы искали это

MyApp_CPPFLAGS = -I$LOCATION 
MyApp_LDADD = libEncoding2.la # or .a 

И это сработает.

Но, с другой стороны, кажется, что вам нужно потратить некоторое время, чтобы понять, как работают autotools, поскольку это может быть не то, что вы ищете. С зерном соли вы можете взять мой Autotools Mythbuster в качестве отправной точки.

0

Поскольку вы используете статическую библиотеку в ваших рецептах, вы можете сделать мягкую ссылку на библиотеку в папке исходного проекта, то есть, привет-мире-0,1, используя следующую команду, чтобы связать с вашей статической библиотекой

ln -s /home/xxx/workspace/MyApp/Encoding2/Debug/libEncoding2.a 

, а затем отредактировать файл Б.Б., hello-world_0.1.bb, добавив исходный путь к вашему URL

SRC_URI = " \ 
    file://libEncoding2.a \ 
    file://hello-world.c \ 
" 

и в блоке do_compile, используя команду последующей компиляции проекта

do_compile() { 
    ${CC} hello-world.c libEncoding.a -o hello-world 
} 

do_install() { 
    install -d ${D}${bindir}/Hello 
    install -m 0755 enet ${D}${bindir}/Hello 
} 

После Bitbake ваш проект

bitbake hello-world 

и запустить mkefidisk.sh, вы можете найти hello-world в /usr/bin/Hello/hello-world. Надеюсь, этот намек поможет вам.

BTW, я не знаком с autotools, я просто использую make, чтобы бить рецепты.И ваша статическая библиотека также должна быть создана в Yocto, а не в Eclipse, я думаю. Поэтому я думаю, что ваш путь к статической библиотеке, возможно, не правильный, он должен найти в ~/yocto/build/tmp/... или некоторые, где это возможно. В моем случае он находился в ln -s ~/yocto/build/tmp/sysroots/intel-corei7-64/usr/lib/libEncoding.a, зависит от вашей целевой среды.