Я знаю, что есть много вопросов, связанных с разделяемыми библиотеками в Linux, но, может быть, потому, что я устал от тяжелого дня, пытаясь создать простую динамическую библиотеку в Linux (в Windows это заняло бы менее 10 минут), я не могу найти что происходит в этом случае. Итак, я пытаюсь создать библиотеку, которую нужно связать во время сборки и использовать во время выполнения (другими словами, не статическую библиотеку, не библиотеку для встраивания в исполняемый файл). На данный момент он содержит простую функцию. Это мои файлы:
1.
// gugulibrary.cpp
// This is where my function is doing its job
#include "gugulibrary.h"
namespace GuGu {
void SayHello() {
puts("Hello!");
}
}
2.
// gugulibrary.h
// This is where I declare my shared functions
#include <stdio.h>
namespace Gugu {
void SayHello();
}
3.
// guguapp.cpp
// This is the executable using the library
#include "gugulibrary.h"
int main() {
GuGu::SayHello();
return 0;
}
Вот как я пытаюсь построить свой проект (и я думаю, что это неправильно):
gcc -Wall -s -O2 -fPIC -c gugulibrary.cpp -o gugulibrary.o
ld -shared -o bin/libGugu.so gugulibrary.o
gcc -Wall -s -O2 guguapp.cpp -o bin/GuGu -ldl
export LD_LIBRARY_PATH=bin
Это сохраняется как файл .sh, который я щелкаю и запускаю в терминале. Ошибка, которую я получаю при попытке связать библиотеку, такова:
/tmp/ccG05CQD.o: In function `main':
guguapp.cpp:(.text.startup+0x7): undefined reference to `SayHello'
collect2: ld returned 1 exit status
И тут я теряюсь. Я хочу, чтобы библиотека находилась в той же папке, что и исполняемый файл, и, возможно, мне нужен какой-то файл символов/определений или что-то еще, что я не знаю, как создать. Спасибо за вашу помощь!
-lGugu
- person William Pursell   schedule 04.01.2013gcc
? Почему неg++
? - person Arun   schedule 04.01.2013extern C
, когда используются не-C конструкции, такие какnamespace
... - person Arun   schedule 04.01.2013